欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript 学习笔记 之 类型

程序员文章站 2024-03-19 14:18:52
...

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) {
			/*..*/
		}