JavaScript 学习笔记 之 类型

JavaScript中的类型

JavaScript中变量是没有类型的,只有值才有,变量可以随时持有任何类型的值

JavaScript中的类型包括了6个基本类型(ES6中新增了一个symbol),和一个复杂类型(object)

  1. 空值(null)
  2. 未定义(undefined)
  3. 布尔值(boolean)
  4. 数字(number)
  5. 字符串(string)
  6. 对象(object)
  7. 符号(symbol,ES6新增)

我们可以用typeof运算符来查看值的类型,他返回的是一个字符串值

			typeof undefined === "undefined"
			typeof true === "boolean"
			typeof 42 === "number"
			typeof "42"  === "string"
			typeof {life: 42}  === "object"
			typeof Symbol() === "symbol"

以上六种类型均有同名的字符串与之对应

除了null

			typeof null === "object"

这是因为一个由来已久的bug

JavaScript把二进制前三位为0的值判断为对象

而null的二进制全为零

于是被误判为了对象

因此我们需要用复合条件来检测null值的类型(既是假值,typeof返回的又是对象的基本类型)

		var a = null;
		(!a && typeof a === "object"); //true

还有一种情况

			typeof function(){} === "function"
			typeof [1, 2, 3] === "object"

似乎function也是一种类型

但是function事实上和数组一样也是object的一个子类型

function有一个内部属性[[call]]

该属性使其可以被调用

还有一个属性length,表示声明的参数的个数

数组的length则表示数组的长度

		function a(b, c) {}
		a.length; //2

被误解的undefined

似乎undefined代表这变量未声明

但事实上undefined代表的是变量已声明但是未持有值

		var a;
		a; //undefined
		b; //ReferenceError: b is not defined

而我们用typeof输出却会发现

			typeof a; //undefined
			typeof b; //undefined

这是因为typeof有一个特殊的安全机制

安全机制

上面我们说到typeof有一个不报错的检查一个未声明的变量的安全机制

事实上这个安全机制可以帮我们很多忙

		if(a) {} //如果a未定义,会抛出一个错误
		if(typeof a !== "undefined") {} //这样则是安全的

另外一种方法是通过对象的属性来进行检查

比如检查一个全局变量的时候

		if(window.a) {
			/*..*/
		}

猜你喜欢

转载自blog.csdn.net/Aproducer/article/details/82792775