类型,值和变量
1.js的解析器有自己的内存管理机制,可以自动进行内存的垃圾回收,程序可以按需创建对象,当一个对象不再受到任何的引用时,系统会自己进行回收;
2.js中只有null和underfiend无法拥有方法的值;
3.判断一个变量是否为NaN时;利用x !== x来操作;X===NaN返回的是false,js的规定NaN不等于任何东西,包括本身;
-0===0返回true;但是在-0和0做除数的时候,值就不相等了;
包装对象为:String,Number,Boolean这是包装类型的对象,他们的字面量都可以调用构造函数上的方法,当调用方法的时候回临时创建对象,方法调用完毕后可以理解为创建的该临时对象被销毁,(这个临时对象就是包装对象)所以当你为字符串,数值,布尔类型的变量创建新的属性或者方法时,该方法和对象回添加在创建的临时对象上,你在用变量获取是获取不到的; var a = '字符串'; a.len = 4; var t = a.len; 输出的t为underfiend;
6.js里的原始值(null,underfiend、string、number、boolean)都是不可变值,包括字符串,字符串中所有的返回字符串的方法都是返回了一个新的字符串;
7.对象和数组、函数等复杂的数据类型又叫做引用类型,可以理解为他们复制给变量的值为引用的值,并非对象等本身,所以即使他们的属性和值相等,他们赋值给变量的引用的值也不相等;
8.toString()的方法;根据类的定义的不同(obj,array,function)等会返回不同的字符串:{}会返回object object字符串;数组会返回数组元素用,拼接的字符串;函数会返回函数的内容;
9.valueOf()的方法,存在原始值则返回原始值,对象,数组,函数等构造函数类都是复合属性一般会返回本身;没有原始值就会返回本身;
toString()的方法在对象转换成字符串时优先使用此方法;valueOf()的方法在对象转换成数字时优先使用;空数组转换成0的过程:数组继承了valueOf的方法,先转换成一个空对象,在调用toString()的方法来将空对象装换成空字符串在转换成数字0;
全局变量的声明利用var和直接书写变量的不同点:利用好var声明的变量就是在全局变量上定义了一个属性,并且这个属性是不可以配置的,就是说这个属性无法用delete运算费用删除;在非严格模式下不利用var声明的变量也是全局变量,这种对象是可以配置的所以可以利用delete运算符删除;
嵌套函数的作用域链,每次调用都会生成新的作用域环境,从而生成新的作用域链;