typeof运算符 +unll和undefined的区别
typeof运算符
JavaScript 有三种方法,可以确定一个值到底是什么类型。而我们 现在需要接触到的就是typeof
数值返回number
1 typeof 123 // "number" |
字符串返回string
1 typeof '123' // "string" |
布尔值返回boolean
1 typeof false // "boolean" |
对象返回object
1 typeof {} // "object" |
unll和undefined的区别
概述
null与undefined都可以表示“没有”,含义非常相似。将一个变量赋 值为undefined或null,老实说,语法效果几乎没区别。
既然含义与 用法都差不多,为什么要同时设置两个这样的值,这不是无端增加 复杂度,令初学者困扰吗?这与历史原因有关
历史原因:
1995年JavaScript诞生时,最初像Java一样,只设置了
null
作为表示"无"的值。根据C语言的传统,null
被设计成可以自动转为0
。但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。首先,
null
像在Java里一样,被当成一个对象。但是,JavaScript的值分成原始类型和合成类型两大类,Brendan Eich觉得表示"无"的值最好不是对象。其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null
自动转为0,很不容易发现错误。因此,Brendan Eich又设计了一个
undefined
。他是这样区分的:null
是一个表示"无"的对象,转为数值时为0
;undefined
是一个表示"无"的原始值,转为数值时为NaN
。Number(undefined) // NaN 5 + undefined // NaN
null
的特殊之处在于,JavaScript把它包含在对象类型(object)之中查询
null
的类型,JavaScript返回object
(对象):typeof null // "object"
这并不是说null的数据类型就是对象,而是JavaScript早期部署中的一个约定俗成,其实不完全正确,后来再想改已经太晚了,会破坏现存代码,所以一直保留至今。
注意:JavaScript的标识名区分大小写,所以
undefined
和null
不同于Undefined
和Null
(或者其他仅仅大小写不同的词形),后者只是普通的变量名。