总结:
- 6种简单数据类型(也称为原始类型):Undefined、Null、Boolean、Number、 String 和 Symbol。
复杂数据类型:Object
- typeof未声明的变量,返回undefined:console.log(typeof age); // “undefined”
- 存储浮点值使用的内存空间是存储整数值的两倍,所以 ECMAScript 把值转换为整数:let floatNum1 = 1.0; // 当成整数 1 处理
- isNaN(),Number()用于对象,首先会调用对象的 valueOf() 方法,然后再确定返回的值是否可以转换为数值。如果不能,再调用 toString()方法, 并测试其返回值
- parseFloat,parseInt,字符串插值用于对象会调用对象的toString方法,没有这个方法会返回NaN;const o = {toString: ()=> {return’55’}} console.log(parseFloat(o)) let foo = { toString: () => ‘World’ }; console.log(
Hello, ${ foo }!
); // Hello, World! - 需要得到整数时可以优先使 用 parseInt()函数,第一个字符不是数值字符、加号或减号,parseInt()立即 返回 NaN。let num1 = parseInt(“1234blue”); // 1234;parseInt()也接收第二个参数,用于指定底数(进制数)。let num = parseInt(“0xAF”, 16); // 175
- 两种方式把一个值转换为字符串:toString(null 和 undefined 值没有 toString()方法),接收一个底数参数;let num = 10; console.log(num.toString(2)); //转换为二进制 “1010”;String方法(如果值有 toString()方法,则调用该方法(不传参数)并返回结果。)const a = {toString: () => {return1}} console.log(String(a)) // 1
- 常用内置符号:Symbol.iterator或@@iterator(for-of 循环会在相关对象上使用 Symbol.iterator 属性) Symbol.asyncIterator,Symbol.hasInstance,Symbol.isConcatSpreadable, Symbol.match,Symbol.replace,Symbol.search,Symbol.species,Symbol.split;这些内置符由String.prototype里对应的方法使用;Symbol.toPrimitive,Symbol.toStringTag,Symbol.unscopables
- Object 实例的valueOf():返回对象对应的字符串、数值或布尔值表示;通常与 toString()的返回值相同,因为Object 是所有对象的基类,所以任何对象都有这些属性和方法
训练:
- 如何正确的判断一个变量的类型?(除了typeof)
Object.prototype.toString.call()
每一个对象都有一个toString方法,toString() 返回 “[object type]”,其中 type 是对象的类型,用call方法改变this指向,返回call参数对象对应的”[object type]”;
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/GlobalObjects/Object/toString#%E4%BD%BF%E7%94%A8_tostring()%E6%A3%80%E6%B5%8B%E5%AF%B9%E8%B1%A1%E7%B1%BB%E5%9E%8B_%E6%A3%80%E6%B5%8B%E5%AF%B9%E8%B1%A1%E7%B1%BB%E5%9E%8B)
平常很少用到的知识:
模板字面量标签函数