数据类型
-
基本类型
Undefined
、Null
、Boolean
、Number
(包含NaN
)、String
、Symbol(es2020新增)undefined
与null
区别
undefined字面意义为未定义数值的变量; null为空对象; undefined == null; // true undefined === null; // false
NaN
特殊:NaN不等于任何值,甚至不等于自己
Nan == NaN; // false isNaN(NaN); // true
- 数值转换
Number("Hello world!"); // NaN Number(""); // 0 Number("000011"); // 11 Number(true); // 1 Number(false); // 0 Number(undefined); // NaN Number(null); // 0
-
引用类型
Object
(Array
、Function
都属于Object) Object 的每个实例,即所有对象都具有下列属性和方法。constructor() // 保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是 Object()。 hasOwnProperty(propertyName) // 用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))。 isPrototypeOf(object) // 用于检查传入的对象是否是传入对象的原型。 propertyIsEnumerable(propertyName) // 用于检查给定的属性是否能够使用`for-in`语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。 toLocaleString() // 返回对象的字符串表示,该字符串与执行环境的地区对应。 toString() // 返回对象的字符串表示。 valueOf() // 返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
-
typeof
和instanceof
:判断变量的数据类型typeof null; // object typeof undefined; // undefined // 如果变量a未通过var或let及const定义 typeof a; // undefined, 并不会报错
操作符
- 布尔操作符
- 逻辑非
!
:除了''
,0
,null
,undefined
,NaN
,都会被认定为false
!0; // true; !NaN; // true;
- 逻辑与
&&
// 当第一个判断条件为true时,相当于定义a为第二个判断条件 // 当第一个判断条件为false时,a = false; var a = true && 1; // a = 1; var a = false && 1; // a = false;
- 逻辑或
||
:经常用来设置变量默认值
// 当第一个判断条件为true时,a = true; // 当第一个判断条件为false时,a = 第二个判断条件 var a = true || 1; // a = true; var a = false || 1; // a = 1;
- 逻辑非
- 一元操作符
+
:列出几种特殊情况- 与复杂数据类型,如对象,数组等,会先调用对应的的
valueOf
方法,如果返回不为字符串,再调用toString
方法;
{} + !{}; // 0; [] + ![]; // 'false', ![]计算为false; var a = {}, b = {}; a + b; // '[object Object][object Object]' {} + {}; // NaN // 在 JavaScript 中,{} 被解析为一个空的代码块而不是一个对象字面量。当使用+运算符对两个空代码块进行相加时,它会尝试将它们转换为数字类型进行相加。但是由于两个空代码块不包含任何可以被转换为数字的内容,所以将它们转换为数字时会得到NaN
- 与字符串相加时,结果一定是字符串;
1 + '1'; // '11' [] + '1'; // '1' true + ''; // 'true'
- 与数字相加
undefined + 1; // NaN null + 1; // 1; null转为0 true + 1; // 2; true转为1 false + 1; // 1; false转为0
- 与复杂数据类型,如对象,数组等,会先调用对应的的
隐式类型转换
!
操作符:将变量转为Boolean类型+
与-
操作符