# JavaScript 常见语法

# 1. 相等

隐式类型转换:

'' == 0; // true

在 TS 中,不同类型的数据的比较,===== 都会报错

对象类型数据的比较:

  1. 使用 deep-equal 包
  2. 业务中,通常比较 id 属性即可

# 2. null 和 undefined

作用:

  • undefined: 变量没有初始化
  • null: 变量不可用

比较:

null == undefined; // true

if (foo != null) { // 排除 null 和 undefined
  // ...
}

检查变量是否定义:

if (typeof someGlobal !== 'undefined') {
  // ...
}

不要显式使用 undefined:

function foo() {
  if (/* ... */) {
    return { a: 1 }
  } else {
    return { a: undefined }
  }
}

function foo(): { a?: number } {
  if (/* ... */) {
    return { a: 1 }
  } else {
    return {}
  }
}

JSON 和 序列化:

  • JSON 支持 null,但不支持 undefined

    // 属性值为 undefined 的属性,在序列化后会被删除掉
    JSON.stringify({ a: null, b: undefined }); // '{"a":null}'
    
  • 将属性值设置为 null 再传输给远程服务器,表达清除属性的意图

# 3. 数字

十进制:

  • 二进制数据不能正确映射到十进制的问题:

    0.1 + 0.2; // 0.30000000000000004
    
  • big.js

    • 完美的十进制运算
    • 超出整数值的安全计算

NaN:

  • 表示一个计算出来的数字不是一个有效数字

    Math.sqrt(-1); // NaN
    
    NaN == NaN;     // false
    NaN === NaN;    // false
    
    Number.isNaN(NaN); // true
    

# 4. truthy

变量类型 falsy truthy
boolean false true
string ''(空串) 其他
number 0NaN 其他
null 总是 从不
undefined 总是 从不
对象 从不 总是
本章目录