Skip to content
On this page

变量类型和计算

值类型与引用类型

  • 常见的值类型

    js
    let a // undefined
    const s = 'abc'
    const n = 100
    const b = true
    const y = Symbol('y')
    
  • 常见的引用类型

    js
    cosnt obj = {x: 100}
    cosnt arr = [1,2,3]
    const n = null //特殊的引用类型,指针指向空地址
    
    // 函数 特殊引用类型,但不能用于存储数据,所以没有“拷贝、复制函数”这个说法
    function fun(){}
    
  • typeof 运算符

    • 识别所有值类型

    • 识别函数

    • 判断是否是引用类型(不可再细分)

      js
      let a // undefined
      const s = 'abc'
      const n = 100
      const b = true
      const y = Symbol('y')
      
      console.log(typeof a); //undefined
      console.log(typeof s); //string
      console.log(typeof n); //number
      console.log(typeof b); //boolean
      console.log(typeof y); //symbol
      
      js
      // 能判断函数
      console.log(typeof console.log); // function
      console.log(typeof function(){}); //function
      
      // 能识别引用类型
      console.log(typeof null); //object
      console.log(typeof ['a']); //object
      console.log(typeof {b: 'b'}); //object
      
  • 深拷贝

    • js
      function deepClone(obj = {}){
        if(typeof obj !== 'object' || obj == null) return obj
      
        // 初始化返回结果
        let result
        obj instanceof Array ? result = [] : result = {}
      
        for(let key in obj){
          // 保证当前属性来源于自身,不来自原型
          if(obj.hasOwnProperty(key)){
            result[key] = deepClone(obj[key]) 
          }
        }
      
        return result
      }
      

类型判断

  • 字符串拼接

    • js
      const a = 100 + 10  // 110
      const b = 100 + '10' // '10010'  
      const c = true + '10' // 'true10'
      const d = 100 + parseInt('10') // 110
      
  • ==

    • js
      100 == '100'  // true
      0 == ''  // true
      0 == false  // true
      false == ''  // true
      null == undefined  // true
      
    • js
      // 除了 == null以外,其他一律用===
      
      const obj = {}
      if(obj.a == null){}
      // 相当于
      if(obj.a === null || obj.a === undefined){}
      
  • if语句和逻辑运算

    • truly变量: !!a === true 的变量

    • falsely变量: !!a === false 的变量

    • js
      !!0 === false
      !!'' === false
      !!undefined === false
      !!null === false
      !!NaN === false
      !!false === false
      //除了以上情况,其他全是truly变量
      
    • if语句和逻辑运算里判断的就是是否为truly还是falsely变量,如if(1) if(null)等等

    • js
      10 && 0  //0
      '' || 'abc'  // 'abc'