数据类型、操作符 、隐式类型转换

30 阅读3分钟

数据类型

  1. 基本类型 UndefinedNullBooleanNumber(包含NaN)、String、Symbol(es2020新增)

    1. undefinednull区别
    undefined字面意义为未定义数值的变量;
    null为空对象;
    undefined == null; // true
    undefined === null; // false
    
    1. NaN特殊:NaN不等于任何值,甚至不等于自己
    Nan == NaN; // false
    isNaN(NaN); // true
    
    1. 数值转换
    Number("Hello world!"); // NaN
    Number("");             // 0
    Number("000011");       // 11
    Number(true);           // 1
    Number(false);          // 0
    Number(undefined);      // NaN
    Number(null);           // 0
    
  2. 引用类型 Object(ArrayFunction都属于Object) Object 的每个实例,即所有对象都具有下列属性和方法。

    constructor() // 保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor)就是 Object()。
    hasOwnProperty(propertyName) // 用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串形式指定(例如:o.hasOwnProperty("name"))。
    isPrototypeOf(object) // 用于检查传入的对象是否是传入对象的原型。
    propertyIsEnumerable(propertyName) // 用于检查给定的属性是否能够使用`for-in`语句来枚举。与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定。
    toLocaleString() // 返回对象的字符串表示,该字符串与执行环境的地区对应。
    toString() // 返回对象的字符串表示。
    valueOf() // 返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。
    
  3. typeofinstanceof:判断变量的数据类型

    typeof null; // object
    typeof undefined; // undefined
    
    // 如果变量a未通过var或let及const定义
    typeof a; // undefined, 并不会报错
    

操作符

  1. 布尔操作符
    1. 逻辑非 !:除了'', 0,null,undefined, NaN,都会被认定为false
    !0; // true;
    !NaN; // true;
    
    1. 逻辑与 &&
    // 当第一个判断条件为true时,相当于定义a为第二个判断条件
    // 当第一个判断条件为false时,a = false;
    var a = true && 1; // a = 1;
    var a = false && 1; // a = false;
    
    1. 逻辑或 ||:经常用来设置变量默认值
    // 当第一个判断条件为true时,a = true;
    // 当第一个判断条件为false时,a = 第二个判断条件
    var a = true || 1; // a = true;
    var a = false || 1; // a = 1;
    
  2. 一元操作符
    1. +:列出几种特殊情况
      1. 与复杂数据类型,如对象,数组等,会先调用对应的的valueOf方法,如果返回不为字符串,再调用toString方法;
      {} + !{}; // 0;
      [] + ![]; // 'false', ![]计算为false;
      var a = {}, b = {}; a + b; // '[object Object][object Object]'
      {} + {}; // NaN 
      // 在 JavaScript 中,{} 被解析为一个空的代码块而不是一个对象字面量。当使用+运算符对两个空代码块进行相加时,它会尝试将它们转换为数字类型进行相加。但是由于两个空代码块不包含任何可以被转换为数字的内容,所以将它们转换为数字时会得到NaN
      
      1. 与字符串相加时,结果一定是字符串;
      1 + '1'; // '11'
      [] + '1'; // '1' 
      true + ''; // 'true'
      
      1. 与数字相加
      undefined + 1; // NaN
      null + 1; // 1; null转为0
      true + 1; // 2; true转为1
      false + 1; // 1; false转为0
      

隐式类型转换

  1. ! 操作符:将变量转为Boolean类型
  2. +- 操作符