typeof
下表总结了 typeof 可能的返回值
一、number类型
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管它是 "Not-A-Number" (非数值) 的缩写
typeof Number(1) === 'number'; // Number 会尝试把参数解析成数值
二、string类型
typeof `template literal` === 'string';
typeof '1' === 'string'; // 注意内容为数字的字符串仍是字符串
typeof (typeof 1) === 'string'; // typeof 总是返回一个字符串
typeof String(1) === 'string'; // String 将任意值转换为字符串,比 toString 更安全
三、boolean类型
typeof Boolean(1) === 'boolean'; // Boolean() 会基于参数是真值还是虚值进行转换
typeof !!(1) === 'boolean'; // 两次调用 !(逻辑非)运算符相当于 Boolean()
四、Symbol类型
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';
五、undefined类型
typeof undefined === 'undefined';
六、object类型
// 使用 Array.isArray 或者 Object.prototype.toString.call 区分数组和普通对象
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
typeof /regex/ === 'object';
// 下面的例子令人迷惑,非常危险,没有用处。避免使用它们。
//注意与上面布尔值类型的对比。typeof Number(1) === 'number'
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String('abc') === 'object';
七、函数类型
typeof function() {} === 'function';
typeof class C {} === 'function'; //类也是函数类型
typeof Math.sin === 'function';
八、null类型
// JavaScript 诞生以来便如此
typeof null === 'object'
不同类型值相加
隐式转换规则
转成 string 类型: +(字符串连接符)
转成 number 类型:++ --(自增自减运算符)+ - * / % **(算术运算符)> < >= <= == !=(关系运算符)
转成 boolean 类型:! !!(逻辑非运算符)
注意: + 既是连接符,也是运算符。
1. 当 + 两边都有值,且至少一个值是字符串类型,就会出现字符串拼接。
2. 当只有 + 后面有值,例如:+"123"等同于Number("123"),会将字符串转换为数字123
网友评论