加粗样式## Day_03
<script> alert('警示框'); prompt('弹出输入框'); console.log('控制台输出'); </script>
数据类型:简单数据类型和复杂数据类型js的变量数据类型是只有程序在运行过程中,根据等号右边的值确定的.JavaScript拥有动态类型,意味着相同的变量可用作不同的类型.
简单的数据类型:Number,String,Boolean,Udefined,Null
注意:字符串转义字符都是用\开头的但是这些转义字符写到引号里面
eg:var str=‘我是"好人"的\n男朋友’;
boolean布尔类型在和数字类型相加运算时,true为1 ,false为0
eg:console.log(1+true);===>2
console.log(1+false);===>1
NaN不是数字:var a;
console.log(a+1);
结果为NaN
结论:undefined与数字相加结果为NaN
null值和数字相加为数字
null和undefined相加为NaN
boolean类型和undefined相加为NaN
复杂数据类型:Object
null属于Object类型
获取变量的数据类型:typeof
eg: var a=1; console.log(type a);====>number
数据类型转换:
转换为Boolean类型Boolean(),代表为空,否定的值都会被转换为false,如’’,0,NaN,null,undifined,其他的都为true
数字转换为字符串:数字.toString();String(数字);数字+’'称之为隐式转换
字符转换为number类型:parseInt(字符串);如果字符串我小数则取整
parseFloat(字符串);
转换为数字时如果字符串以数字开头字符结尾也会转为数字
eg: var a=“2121浮海石”;parseInt(a);也会为2121
var a=“浮海石2121”;parseInt(a);会为NaN
隐式计算符号: - * / == 字符串做这三种计算式会隐式的转换为Number类型进行运算
算数运算
浮点数的计算因为精度确实的问题故此不能直接用两个浮点数运行进行比较
==号只比较数据值
===号既比较值也比较数据类型
do{}while()语句至少要执行一次
eg:
var i=0; do{ console.log('你好'); i++; }while(i<=100)
js的数组
创建数组的方式:var arr=new Array(); var arr1=[];可以放多种类型的数据
冒泡排序是一种算法,把一系列的数据按照一定的顺序进行排列显示(大到小,小到大).
arguments的使用
当我们不确定有多少个参数传递的时候,可以用arguments来获取,在JavaScript中,arguments实际上他是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中储存了传递的所有实参.
function fn(){ console.log(arguments);//里面存储了所有传递过来的实参 } fn(1,2,3); 打印控制台上Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ] 这是一个伪数组 可以进行遍历 具有length属性 按照索引的方式进行存储的 不具有数组的push和pop等方法 只有函数才有arguments对象,而且每个函数都内置好了这个arguments
函数可以调用另外一个函数
匿名函数
var fun=function(aru){ console.log('我是函数表达式'); } fun('皮特');//fun是变量名不是函数名,
js中的作用域
js中的两种作用域:全局(script标签中的)和局部(函数内部的也叫函数作用域)
能够区分全局变量和局部变量:在全局作用域下的变量或者在函数内部没有生命直接被赋值的变量也为全局变量,在函数内部的变量或者函数的形参都是局部变量.
如何在作用域链中查找变量的值
内部函数访问外部函数的变量,采用的是链式查找的方式来决定取哪个值,这种结构我们称之为作用链.
<script> var num=10; function fn(){//外部函数 var num=20; fun(); function fun(){//内部函数 console.log(num); } } fn(); </script> 结果为:20
预解析
1:我们js引擎执行js分为两步:预解析和代码执行
1.1:预解析js引擎会把js里面所有的var还有funcation提升到当前作用与的最前面
1.2:代码执行,按照代码书写的顺序从上往下执行
2:预解析分为变量预解析(变量提升)和函数预解析(函数提升)
2.1:变量提升就是把所有的变量声明提升到当前的作用域最前面,不提升赋值操作
2.2:函数提升就是把所有的函数声明提升到当前作用于的最前面,不调用函数.
eg:
问1: <script> console.log(num); </script> 报错:num is not defined 问2: <script> console.log(num); var num=10; </script> 结果:undefined //执行的流程 var num; console.log(num); num=10; 问3: <script> fn(); function fn(){ console.log(11); } </script> 结果是:11 //执行的流程 function fn(){ console.log(11); } fn(); 问4: <script> fun(); var fun=function fn(){ console.log(22); } </script> 结果:报错,fun is not function //执行流程 var fun; fun(); fun=function fn(){ console.log(22); } 问4: <script> f1(); console.log(c); console.log(b); console.log(a); function f1(){ var a=b=c=9; console.log(a); console.log(b); console.log(c); } </script> 结果:9,9,9,9,9,c is not defined //执行流程 function f1(){ var a=b=c=9;//相当于 var a=9;b=9;c=9;函数内部没有被var声明的变量为全局 console.log(a); console.log(b); console.log(c); } f1(); console.log(c); console.log(b); console.log(a);
js对象
对象是由方法和属性组成的,
属性:事物的特征,在对象中用属性来表示.(名词)
方法:事物的行为,在对象中用方法来表示(动词)
创建对象的三种方式
1:字面量创建
var obj={};//创建了一个空的对象
var obj={
uname:‘张三丰’,
age:18,
sex:‘男’,
sayHi:function(){
console.log(‘hi~’);
}
}
1.1:
(1):属性或者方法我们采用的是键值对的形式 键 属性名:值 属性值
(2):多个属性或者方法中间采用的是逗号隔开
(3):方法冒号后面跟的是一个匿名函数
1.2:使用对象
(1):调用对象的属性我们采取的是对象名.属性名 eg:obj.uname
(2):调用属性还有另外一种方法 对象名[‘属性名’] eg:obj[‘uname’]
(3):调用对象的方法 对象名.方法名 eg:obj.sayHi();
小结:变量,属性,函数,方法的区别
变量和属性的相同点:都是用来保存数据的
不同点:变量单独声明并复制,使用的时候直接写变量名 单独村子啊
属性在对象里面不需要声明,使用时候必须是 对象.属性
函数和方法的相同点:都是实现某种功能的
不同点:函数是单独声明,并且调用 函数名(),单独存在的
方法在对象里面的,调用的时候 对象.方法名();
2:new Object创建
var obj=new Object();//创建了一个空的对象
obj.uname=‘张三丰’;
obj.age=18;
obj.sex=‘男’;
obj.sayHi=function(){
console.log(‘hi~~~’);
}
3:构造函数创建
我们为什么需要用构造函数来创建对象呢?因为前面两种方式只能一次创建一个对象
构造函数:是一个特殊的函数,主要用初始化对象,既为对象成员变量赋初始值,他总与new运算符一起使用,我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面.
//构造函数名字首字母要大写 //构造函数不需要return就可以返回结果 //我们调用构造函数必须使用new //构造函数的属性和方法前必须要使用this关键字 function Start(uname,age,sex){//构造函数 this.name=uname; this.age=age; this.sex=sex; this.sing=function(sang){ } } var ldh=new Start('刘德华',12,'男');//对象 ldh.sing('冰雨'); //构造函数和对象的关系: 对象:是一个具体的事物 构造函数:泛指的某一大类 //我们利用构造函数创建对象的过程我们也称之为对象的实例化 //new关键字 1:new 构造函数可以在内存中创建一个空的对象 2:this就会指向刚才创建的空对象 3:执行构造函数的代码,给这个空对象添加属性和方法 4:返回这个对象
遍历对象
for in遍历我们的对象
for(var 变量 in 对象){}
var obj={ name:'张三分', age:13, sex:'男', say:function(){ console.log('sayHi~~~~'); return 'dsad'; } } for(var k in obj){ console.log(k); console.log(obj[k]);//只能这种方式获取属性值不能 对象. console.log(obj.k);//undefined }