JS学习总结之一

一、数据类型

1、基本数据类型:Number,String,Boolean,Null,Undefined。
2、引用类型:Object。
1)Number.MAX_VALUE:Number所能表示的最大值:1.7976931348623157e+308;
2)Number.MIN_VALUE:大于0的最小值: 5e-324 ;
3)Null的值只有一个:null;用来表示一个空的对象,用typeof检查其类型,返回的是object ;

二、强制类型转换

主要是指其他类型转换为String,Number,Boolean
1、其他类型转换为String
1)调用toString()。但Null和Undefined没有toString()方法;
2)调用String函数,对于Number和Boolean实际上是调用toString(),对于Null和Undefined,则是直接将unll转换为"null",将undefined转化为"undefined";
2、其他类型转换为Number
–使用Number()函数
1)String—>Number
---- a、如果字符串是纯数字,则直接转换:“123”–>123 ;
-----b、如果字符串中有非数字内容,转换为NaN ;
-----c、字符串为空串或者只有空格,转换为0 ;
2)Boolean—>Number: true–>1 ;false—>0;
3)Null—>Number:转换为0 ;
4)Object—>Number:转化为NaN ;
–使用parseInt()和parseFloat() :仅用于字符串
3、其他类型转换为Boolean
调用Boolean()函数
1)Number—>Boolean :除了0和NaN,其他全为true;
2)String—>Boolean :除了空串,其他全为true;
3)Null—>Boolean : false;
4)Undefined—>Boolean : false;
5)Object—>Boolean : true;

三、JS的三种逻辑运算:&&;||;!

对于非布尔类型的,先将其转换为布尔类型;但是结果返回的是原类型,而非布尔类型;
1、&&
1)true&&true:结果返回后面一个;
2)false&&true:结果返回false的那个;
3)false&&false:结果返回前面那一个;
2、||
1)true||true:结果返回前面一个;
2)false||false:结果返回后面一个;

四、JS的if、switch、while、for

与其他语言类似

五、对象

1、对象的分类
1)内建对象:由ES标准中定义的对象,在任何的ES实现中都可以使用;
如:Math,String,Number。。。
2)宿主对象:由JS的运行环境提供的对象,目前一般指由浏览器提供的对象
如:BOM(浏览器对象模型),DOM(文档对象模型)
3)自定义对象:由JS开发人员创建的对象
2、创建对象的两种方式
1)使用new关键字:var obj=new Object();
2)使用字面量:var obj={};
3、基本数据类型和引用类型的内存分析
JS的变量都是保存在栈内存中的
1)基本数据类型的值直接在栈内存中保存,值与值之间相互独立;
2)对象是保存在堆内存中的,每当创建一个对象,就会在堆内存中开辟一个新的内存区域;而变量保存的是对象的地址(对象的引用);

六、函数

1、创建函数
1)使用函数声明创建函数: function 函数名([形参1,形参2…]){}
2)使用函数表达式创建函数:var 函数名=function([形参1,形参2…]){}
2、立即执行函数
有些函数只想执行一次,不需要使用var创建,使用匿名函数:(function(){})();
3、枚举对象中的属性
使用for…in语句:for(var 变量名 in 对象){};
对象有几个属性,循环体就执行几次,每次将一个对象的属性名赋给变量

4、作用域
JS有两种作用域
1)全局作用域
a、直接编写在script标签中的JS代码,都是全局作用域;
b、全局作用域在页面打开时创建,在页面关闭时销毁;
c、在全局作用域中有一个全局对象window:它代表的是一个浏览器窗口,它由浏览器创建,我们可以直接使用;
d、在全局作用域中,创建的对象都会作为window对象的属性保存;创建的函数都会作为window对象的方法;
e、全局作用域中的变量都是全局变量:在页面中的任何部分的可以访问得到;
2)函数作用域
a、调用函数时创建函数作用域,函数执行结束时函数作用域销毁;
b、在函数作用域中可以访问到全局变量,但在全局作用域不能访问到函数作用域中的变量;
c、在函数作用域中操作一个变量,它会现在自身查找,有则直接使用;没有就到它的上一级去查找,直到全局作用域;
d、在函数中要访问全局变量的,则使用window.全局变量名;

5、函数的方法:call()和apply()
当对函数调用call()和apply()时,都会调用函数执行;
在调用call()和apply()时,可以将一个对象指定为第一个参数,此时这个对象将会成为函数的this;
1)fun.call(对象,实参1,实参2…):实参在对象之后依次传递;
2)fun.apply(对象,[实参1,实参2]):将实参封装到一个数组中传递;

6、this情况
1)以函数形式调用,this永远指向window;
2)以方法形式调用,this指向调用它的那个,谁调指谁;
3)以构造函数形式调用,this指向新创建的那个对象;
4)使用call()和apply()调用时,this是指定的那个对象;
7、arguments
在调用函数时,浏览器传递两个隐含的参数:一个是函数上下文this,一个是封装实参的对象arguments;
1)arguments是一个类数组对象,也可以通过索引来操作,也可以获取长度;
2)在调用函数时我们传递的实参都会在arguments中保存;
3)arguments.length可以用来获取实参的长度(个数);
4)arguments有一个属性:callee-----对应一个函数对象,就是正在执行的函数对象

七、原型:prototype

1、 我们所创建的每一个函数,解析器的会向函数添加一个属性:prototype, 这个属性对应着一个对象,这个对象就是我们的原型
2、当函数以构造函数调用时,它所创建的对象中都有一个隐含的属性, 指向该构造函数的原型对象,可以用__proto__访问;
3、用in检查一个对象是否含有某个属性时,如果对象中没有,而原型中有,也会返回true;
3、原型对象也是对象,所以它也有原型;当我们使用一个对象的属性或方法时,它会现在自身查找,如果有,则直接使用;如果没有,就去它的原型中找,如果有则使用;如果没有,就再去它的原型的原型中找,直到找到Object的原型。Object对象的原型没有原型,如果在Object对象的原型中还没有找到,则返回Undefined。这样一层一层地查找,就构成了原型链;

八、垃圾回收

当一个对象没有任何变量或属性对它进行引用时,这个对象就成了垃圾;JS中有自动的垃圾回收机制,我们只须将对象设置成null即可。
var obj=new Object();
obj=null;

九、数组

1、数组的长度length
a、对于连续的数组,返回数组的长度;对于非连续性的数组,长度为最大索引值+1;
b、 设置数组的长度length
当设置的length大于数组有的元素时,其他会留出内存
当设置的length小于数组有的元素时,多出的元素会被直接删掉
2、数组的常用方法
1)push():向数组的末尾添加一个或多个元素,并将新数组的长度返回;
2)pop():删除数组最后一个元素,并将被删除的元素作为返回值返回;
3)unshift():向数组的开头添加一个或多个元素,并将新数组的长度返回;
4)shift():删除数组的第一个元素,并将被删除元素作为返回值返回;
5)slice():从数组中提取指定元素;该方法不会改变原数组,只是将提取出来的元素封装到一个新数组中返回;
参数:
----第1个参数:截取开始位置的索引,包括开始索引
----第2个参数截取结束位置的索引,不包括结束索引
----参数可以是负值,-1代表倒数第一个,-2表示倒数第二个。。。。
----第二个参数可不写,表示从开始位置往后全部截取
6)splice():用来删除指定数组元素,还可以向数组中插入新元素;
该方法会影响原数组,将指定元素从原数组中删除,,并将删除的元素返回
参数:
— 第一个参数:开始删除位置的索引
----第二个参数:删除的数量~~~
— 第三个参数及以后。。。: 可以传递一些新的元素,这些元素将在删除位置索引前插入
7)concat():连接两个或多个数组,并将新的数组返回;不影响原数组,只是将结果返回;
8)join():将数组以字符串形式返回,不影响原数组;
参数作为字符串连接的连接符,如果没有指定,则使用逗号(,)连接;
9)reverse():将数组反转,会影响原数组;
10)sort():将数组进行排序,按照Unicode编码排序;会影响原数组;
注:但对于纯数字也是按照 Unicode编码排序,可能会出错;如[2,3,11,5]
所以我们可以自定义排序规则:在sort()中定义一个回调函数,来指定排序规则
sort(function(a,b){}:需要两个参数,浏览器会将数组中 元素作为实参调用回调函数;浏览器会根据回调函数的返回值来进行排序:
----a、返回值大于0;则元素交换位置;
----b、返回值大于0;则元素位置不变;
----c、返回值大于0;认为两个元素相等也不交换位置;
3、数组的forEach()
我们一般用for循环来遍历数组,但也可以使用数组提供的forEach方法
forEach()需要一个函数作为参数:这种函数由我们创建的但不由我们调用的,我们称作回调函数,数组中有几个元素,就回调几次; 每次执行时,浏览器会将遍历到的元素以实参的形式传递进来;

  • 浏览器会传给这个函数 三个参数:
    第一个参数:正在遍历的数组的元素;
    第二个参数:正在遍历的数组元素的索引;
    第三个参数:正在遍历的数组;

十、包装类

JS提供了三个包装类:String,Number,Boolean;
1、String()可以将基本数据类型的字符串转换成String对象;
2、Number()可以将基本数据类型的数字转化为Number对象;
3、Boolean()可以将基本数据类型的布尔值转化为Boolean对象;
开发者不用,只是浏览器底层自己用,临时封装;

十一、字符串的一些常用方法

1、charAt():返回指定位置的字符;
2、charCodeAt():返回指定位置字符的Unicode编码;
3、String.fromCharCode();返回指定Unicode编码的字符;值得注意的是,这里使用String调用;
4、slice():用来截取字符串;与数组的slice()类似;
5、substring();也是截取字符串,与slice()不同的是,substring()不能传递负数,如果传递负数,则认为是0; 如果第二个参数比第一个参数大,它会自动交换位置;
6、splice():将字符串拆分为数组;需要一个字符串作为参数,这个参数就是拆分的条件:如果参数为空串,则将每一个字符都拆分为一个数组元素;

你可能感兴趣的:(study)