Open Silencer-1984 opened 3 years ago
另外对于 null 来说,很多人会认为他是个对象类型,其实这是错误的。虽然 typeof null 会输出 object,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。同理null instanceof Object是false
null
typeof null
object
000
null instanceof Object
当一个对象重新赋值的时候就重新开辟新的堆内存,原来的赋值对象不受影响。
1.对于基本类型,除 null 以外,均可以返回正确的结果。 2.对于引用类型,除 function 以外,一律返回 object 类型。 3.对于 null ,返回 object 类型。 4.对于 function 返回 function 类型。型
// 其实根据原型链分析就可以得到以下 [] instanceof Object // true [] instanceof Array // true
undefined
false
NaN
''
0
-0
true
加法运算符不同于其他几个运算符,它有以下几个特点:
'a' + + 'b' // -> "aNaN"
那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字
+的优先级大于三元运算符,所以
var val = 'smtg'; console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing'); // Something
Null bug
另外对于
null
来说,很多人会认为他是个对象类型,其实这是错误的。虽然typeof null
会输出object
,但是这只是 JS 存在的一个悠久 Bug。在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000
开头代表是对象,然而null
表示为全零,所以将它错误的判断为object
。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。同理null instanceof Object
是false引用类型
当一个对象重新赋值的时候就重新开辟新的堆内存,原来的赋值对象不受影响。
typeof vs instanceof
1.对于基本类型,除 null 以外,均可以返回正确的结果。 2.对于引用类型,除 function 以外,一律返回 object 类型。 3.对于 null ,返回 object 类型。 4.对于 function 返回 function 类型。型
类型转换
undefined
,null
,false
,NaN
,''
,0
,-0
,其他所有值都转为true
,包括所有对象加法运算符不同于其他几个运算符,它有以下几个特点:
那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字
==
箭头函数
奇葩优先级
+的优先级大于三元运算符,所以