1:原始值与对象最大的区别是如何比较的,每个对象有唯一的标识符并且只和自己相等。相反,所有的原始值只要编码相同,就认为是相等。
2:如果函数中没有任何显示的返回值得话,那么会隐式的返回undefined.
3:undefined更多的时候表示的是不存在的元素,比如未初始的变化量,缺失的参数,访问一个不存在的属性。函数中没有任何显示的返回值。
4:检测undefined.if(x===undefined) {}还可以用typeof 不过一般推荐是第一个方法。
5:null:他的意思是没有对象。常用来表示空值。undefiend表示删除一个对象属性或是数组元素。null表示将属性或者元素设置为空。
6:null:由于Js采用了java中的将变量分为原始值和对象的处理方式。同时也使用java中表示“非对象”的值null.遵循java的例子,当对null强制转换的时候,会出现0.
8:为了弥补上面null的缺点引入了undefiend,那就是这个值没有指向性,这个值强制转换不回变成0。
7:防止改变undefiend:if(x===void){}
9:null出现:当正则匹配不到,或者是对象间没有原型关系的时候。
10: typeof能检测原始值和对象,并检测出原始值得类型。
11:instanceof 用来检测一个对象是否是特定构造函数的一个实例。
12:typeof null=object null instanceof object().false.
13:NaN 他的类型居然是number 出现的原因:number()中不能被解析的数字。失败的操作Math.log(-1) 其中一个数是NaN的计算。
14:检查一个值是否是NaN function(value) {retrun value!==value;还有个原生函数:isNaN();
为什么IsNaN()不能检测非数字。。。他的原理是这样的:先把这些值转为数字,然后转换可能变成NaN,所以返回错误的结果。最好就是检测值的类型,并且使用IsNaN()函数。
15:infinity:是一个错误值,一是表示一个大到无法表示的数,一是表示一个数除了0.infinity比任何数字都大。-infinity比任何值都小。
16:全局函数isFinite();检测一个数字是不是实际的值。既不是NAN也不是infinity.
17:由于js中所有的数字和符号是分开存储的,所以每一个非负数都由一个负值,包括0.有符号的0可以知道数字是从哪方面接近0的。
18:js数字是64位的,也叫做双精度。通常是按照十进制引入的,但是在内部时他们其实是二进制的浮点数表示的。在处理舍入错误的时候,通常推荐的是不直接比较非整数,取而代之,将边界错误的上界考虑进来。这个上界叫机器精度。把他变大来比较细微的差别。
19:整型数字的范围问题:安全整型:+-Math.pow(2,53) 数组索引:【0,Math.pow(2,32)-1】通常情况下,和不超过53位的整型数字打交道是没问题的,一旦遇到这些超过的,他们必须要以字符串的形式存储起来,一旦要对他们进行运算,要特殊的库来实现。
20:安全的整型:js只能安全的表示上述所说的范围内的数,一旦超过这个范围内的整型。,那么久和一般的实数集可能不会发生一一对应的关系了。