变量类型
-
JS的变量类型分类和判断数据类型
- ECMAScript中有五种简单数据类型(基本数据类型): undefined、null、Boolean、Number、String(ES6引入新的数据类型
Symbol、Bigint
)。还有一种复杂数据类型—Object(其本质是由一组无序的键值对组成的)。所有值最终都是上述6种数据类型
之一。-
可以用
typeof操作符(返回的是字符串格式)
来进行数据类型的检测返回值 说明 “undefined” 如果这个值未定义 “boolean” 如果这个值是布尔值 “string” 如果这个值是字符串 “number” 如果这个值是数值 “object” 如果这个值是对象或 null
“function” 如果这个值是函数 “object” var a = [];(数组的检测也是对象。) “number” typeof NaN 这里需要注意根据上表的情况会发现,我们所期望的null,NaN,数组
, 我们想要的typeof结果并不是我们所期望的。这就是typeof区分的弊端。因此,如何去解决typeof的弊端?(目前所了解的,还有其他的方法。) a instanceof b。判断a是否是b的实例对象。 也就是a的原型链上是否有b的原型对象。 [] instanceof Array; 或者 isArray()方法判断。 null instanceof Object; 或者手动封装一个函数来判断 if(typeof 变量==='object'&&变量===null) {return true;} isNaN(NaN); //return true;
注意虽然函数是对象,不是一种数据类型。但是函数有一些特殊的属性,所以通过typeof来区分函数和其他对象是由必要的。
-
- null与undefined的区别
- null和undefined之间的
操作符(==)总是返回true
。但这个操作符由于比较的目的,会转换其操作数。 - if的判断条件中,两种都表示
false
. - 用途不同。无论什么情况下,都没必要将一个变量赋值为undefined。但是如果保存对象的变量没有真正保存变量,应该明确的让变量保存null值。
- null作为
原型链的终点
。 undefined 用作没有return语句
,或return语句返回的值没有赋值,返回undefined。 - 转成
number数据类型
。 null 默认是 0 . undefined 默认是 NaN .
- null和undefined之间的
- "“与”="的比较
- 相等是 “==”,不相等是"!="。 都会先转换类型(
强制转换
),再进行比较。 - 全等是 “=" , 不全等是 "!” . 比上述
多了比较操作数的类型
。
由于相等和不相等操作符存在类型转换的问题。为了保持数据类型的完整性,推荐用全等和不全等操作符。
- 相等是 “==”,不相等是"!="。 都会先转换类型(
- ECMAScript中有五种简单数据类型(基本数据类型): undefined、null、Boolean、Number、String(ES6引入新的数据类型
-
值类型和引用类型 (补充基本包装类型)
值类型
(基本数据类型):null、undefined、boolean、string、number。引用类型
(复杂数据类型):Object、Array、Function。
区别就在于其存放的位置,变量中的值不同。(用堆、栈的概念理解,虽然js中并没有具体的概念)
.-
值类型放在栈中,存放的是数据 ; 引用类型放在堆中,存放的是地址,指向堆中分配的空间。
-
基本包装类型(Boolean, Number, String )
. js中基本类型没有属性和方法。如果用" . " 来访问其属性和方法。按理说会报错。但是其实js会进行隐式转换,将基本类型转为对象
.
var a='abc'; a.length; // var a = new String('abc'); a.length; a = null ; //进行销毁