“类型” 对语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使其区别于其他值
Javascript 有七种内置类型
- 空值(null)
- 未定义(undefined)
- 布尔值(boolean)
- 数字(number)
- 字符串(string)
- 对象(object)
- 符号(symbol,ES6新增)
除对象外其他统称为“基本类型”
使用typeof运算符来查看值的类型
typeof undefined // 'undefined'
typeof Symbol //'symbol'
注意点:
-
typeof null === 'object'; // true
需要使用复合条件检测null值的类型
(!a&&typeof a ==='object'); // true
后者是用来排除其他类型!a为false的情况,如undefined, true等的情况 -
typeof function a(){/*..*/} === 'function' // true
函数实际上是object的一个子类型————“可调用对象”,它有一个内部属性[[Call]],该属性使其可以被调用,因此函数可以像对象一样拥有属性 -
typeof [1,2,3] === 'object' // true
数组也是object的一个“子类型”,也属于对象,数组的元素按数字顺序来进行索引(而非普通对象那样通过字符串键值),其length属性是元素的个数 -
对变量使用typeof操作时,得到的结果并不是该变量的类型,而是该变量持有的值的类型(字符串表示),因为Javascript中的变量没有类型
Javascript中的变量是没有任何类型的,只有值才有,变量可以随时持有任何类型的值,即Javascript不做“类型强制”,也就是说,语言引擎不要求变量总是持有与其初始值同类型的值
undefined和undeclared
-
变量在未持有值的时候为undefined,此时typeof返回'undefined'
var a ;
typeof a ; // 'undefined'
-
已在作用域中声明但还没有赋值的变量,是undefined的,相反,还没有在作用域中声明过的变量,是undeclared的
var a ;
a;//undefined
b;//ReferenceError: b is not defined
typeof a ;// 'undefined'
typeof b ;// 'undefined'
什么gui ! -
typeof undeclared是一种安全防范机制,在某些情况下是个不错的办法
(1)在程序中使用全局变量DEBUG作为“调试模式”的开关
(2)在别人在他们的程序或模块中复制粘贴你的代码的时候,检查你用到的变量是否已经在宿主程序中定义过
网友评论