Javascript知识整理——类型

“类型” 对语言引擎和开发人员来说,类型是值的内部特征,它定义了值的行为,以使其区别于其他值

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)在别人在他们的程序或模块中复制粘贴你的代码的时候,检查你用到的变量是否已经在宿主程序中定义过

上文为《你不知道的JS中卷》笔记

你可能感兴趣的:(Javascript知识整理——类型)