7中數(shù)據(jù)類型

七個類型:

  • undefined
  • null
  • Boolean
  • String
  • Number
  • Symbol
  • Object

ECMAScript: 由ecma國際定義的js標(biāo)準(zhǔn),1999年12月,ECMAScript 3.0版發(fā)布,成為JavaScript的通行標(biāo)準(zhǔn),得到了廣泛支持。2015年6月17日,ECMAScript 6發(fā)布正式版本,即ECMAScript 2015

es3.0 中undefined可以重新賦值,但是在es5中已經(jīng)屏蔽了這個操作

  • undefined和null的區(qū)別:

1.前者可以被重新賦值,但是es5已經(jīng)作了屏蔽,后者是關(guān)鍵字,不可以重新賦值
!function(window, undefined) {
// 這里的undefined就不會出現(xiàn)賦值的問題
}(window)

  1. undefined in window// true;
    null in window// false

  2. unicode規(guī)定一個字符用兩個字節(jié)表示,一個字節(jié)是8位,那么就是 2 ^ 8 * 2 ^ 8 = 65536
    ascii包含128個字符
    utf-8 和utf-16的區(qū)別:utf-8 使用1、2、3、4個字節(jié)來表示,utf16用2或4個字節(jié)來表示

  3. 對比number小數(shù)位
    Math.abs(0.1 + 0. 2 0.3) < Number.EPSILON

  4. symbol 的定義和使用

    • 原始數(shù)據(jù)類型: 獨(dú)一無二的值
      let s1 = Symbol('s1')
    • 不能做運(yùn)算:
      Boolean(s) // true
      String(s) // Symbol('s1')
      Number(s) // 報(bào)錯,不能轉(zhuǎn)數(shù)字,所以不能用于任何的 + - * /
      s.toString()// 'Symbol('s1')'
    • !!Symbol() // true
    • 不能new操作符, 是
    • Object.assign(obj, newSymbolKeyObj) // 能夠被復(fù)制到新對象上

    使用場景

    • 可以作為obj的key值,obj的key值只能是string和symbol

      • 可以作為對象的私有屬性: 因?yàn)镴SON.stringify(obj),Object.keys()、for in、for of不會返回Symbol的key值
      • 獲取obj中的symbol()屬性:Reflect.ownKeys(obj)、Object.getOwnPropertySymbols(obj)
      • Symbol.for('foo') 和 Symbol.keyFor(s)

      let s = Symbol.for('foo') // 返回Symbol(foo)
      let s = Symbol.keyFor(s) // 返回'foo'
      * 可以定義常量:
      * let RESOVLED = Symbol()

    • 內(nèi)置的Symbol相關(guān)方法

    > Array.prototype[Symbol.iterator] = function() { // 重新定義for of
        let v = 0;
        return {
            next: function () {
                return {value: v++, done: v > 10}
            }
        }
    }
    
    > class objSelf { // 定義了instanceof行為,只有在右邊是objSelf的時候才會調(diào)用
        static [Symbol.hasInstance] (obj) {
            console.log('Symbol.hasInstance')
            return true
        }
    }
    [] instanceof objSelf
    
    
## 數(shù)值運(yùn)算,類型轉(zhuǎn)換
    ```javascript
 let obj = { // 進(jìn)行數(shù)值運(yùn)算,對象轉(zhuǎn)原始類型,最高優(yōu)先級toPrimitive,其次是valueof,其次是tostring
        [Symbol.toPrimitive](hint) {
            if(hint === 'number'){ // 要轉(zhuǎn)成數(shù)字
                console.log('Number場景');
                return 123;
            }
            if(hint === 'string'){ // 要轉(zhuǎn)成字符串
                console.log('String場景');
                return 'str';
            }
            if(hint === 'default'){ // 可以轉(zhuǎn)成字符串或者數(shù)字
                console.log('Default 場景');
                return 'default';
            }
        },
        valueof () {
            console.log('valueof')
            return false
      },
      toString() {
          console.log('toString')
          return false
      }     
    }
    console.log(obj **2) // number
    console.log(String(2)) // string
    console.log(obj + 2) // default

數(shù)據(jù)類型轉(zhuǎn)換規(guī)則

轉(zhuǎn)成boolean、string、number


image.png
    1. 轉(zhuǎn)成boolean

    undefined、null、0、’‘、NaN、false、0、-0都轉(zhuǎn)為false,其他都是true

    1. 四則運(yùn)算

    除了加法,只要有number就都轉(zhuǎn)為number
    6 * [2,1] // NaN
    true * [2] // 2

    1. 加法運(yùn)算符
    1. 一方有string都轉(zhuǎn)為string
    2. boolean和number,轉(zhuǎn)成number
    3. 非number調(diào)用toSting()
    
    1. 比較運(yùn)算符

    對象:通過primitive、valueof、toString轉(zhuǎn)換
    strring: 通過unicode編碼大小比較

    1. == 和 ===
      例子:[] == ![] // true
      [] == !{} // true
      {} == !{} // false
      {} == ![] // false


      image.png
    1. a==1 && a==2 && a==3
      相關(guān)知識點(diǎn):
  1. 隱式轉(zhuǎn)換查找順序是Symbol.isPrimitive、valueof、toString,如果是轉(zhuǎn)換成字符串的隱式類型轉(zhuǎn)換順序是Symbol.isPrimitiv、toString、valueof
    let a = {
    i: 1,
    Symbol.isPrimitive {
    return this.i++
    },
    valueof () {
    return this.i++
    },
    toString () {
    return this.i++
    },
    }
  2. 利用setter和getter
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容