7中数据类型

七个类型:

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

ECMAScript: 由ecma国际定义的js标准,1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015

es3.0 中undefined可以重新赋值,但是在es5中已经屏蔽了这个操作

  • undefined和null的区别:

1.前者可以被重新赋值,但是es5已经作了屏蔽,后者是关键字,不可以重新赋值
!function(window, undefined) {
// 这里的undefined就不会出现赋值的问题
}(window)

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

  2. unicode规定一个字符用两个字节表示,一个字节是8位,那么就是 2 ^ 8 * 2 ^ 8 = 65536
    ascii包含128个字符
    utf-8 和utf-16的区别:utf-8 使用1、2、3、4个字节来表示,utf16用2或4个字节来表示

  3. 对比number小数位
    Math.abs(0.1 + 0. 2 0.3) < Number.EPSILON

  4. symbol 的定义和使用

    • 原始数据类型: 独一无二的值
      let s1 = Symbol('s1')
    • 不能做运算:
      Boolean(s) // true
      String(s) // Symbol('s1')
      Number(s) // 报错,不能转数字,所以不能用于任何的 + - * /
      s.toString()// 'Symbol('s1')'
    • !!Symbol() // true
    • 不能new操作符, 是
    • Object.assign(obj, newSymbolKeyObj) // 能够被复制到新对象上

    使用场景

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

      • 可以作为对象的私有属性: 因为JSON.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()

    • 内置的Symbol相关方法

    > Array.prototype[Symbol.iterator] = function() { // 重新定义for of
        let v = 0;
        return {
            next: function () {
                return {value: v++, done: v > 10}
            }
        }
    }
    
    > class objSelf { // 定义了instanceof行为,只有在右边是objSelf的时候才会调用
        static [Symbol.hasInstance] (obj) {
            console.log('Symbol.hasInstance')
            return true
        }
    }
    [] instanceof objSelf
    
    
## 数值运算,类型转换
    ```javascript
 let obj = { // 进行数值运算,对象转原始类型,最高优先级toPrimitive,其次是valueof,其次是tostring
        [Symbol.toPrimitive](hint) {
            if(hint === 'number'){ // 要转成数字
                console.log('Number场景');
                return 123;
            }
            if(hint === 'string'){ // 要转成字符串
                console.log('String场景');
                return 'str';
            }
            if(hint === 'default'){ // 可以转成字符串或者数字
                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

数据类型转换规则

转成boolean、string、number


image.png
    1. 转成boolean

    undefined、null、0、’‘、NaN、false、0、-0都转为false,其他都是true

    1. 四则运算

    除了加法,只要有number就都转为number
    6 * [2,1] // NaN
    true * [2] // 2

    1. 加法运算符
    1. 一方有string都转为string
    2. boolean和number,转成number
    3. 非number调用toSting()
    
    1. 比较运算符

    对象:通过primitive、valueof、toString转换
    strring: 通过unicode编码大小比较

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


      image.png
    1. a==1 && a==2 && a==3
      相关知识点:
  1. 隐式转换查找顺序是Symbol.isPrimitive、valueof、toString,如果是转换成字符串的隐式类型转换顺序是Symbol.isPrimitiv、toString、valueof
    let a = {
    i: 1,
    Symbol.isPrimitive {
    return this.i++
    },
    valueof () {
    return this.i++
    },
    toString () {
    return this.i++
    },
    }
  2. 利用setter和getter
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 看这本书是在markdown在做的笔记,更友好的阅读方式访问: github es6.md(https://git...
    汪汪仙贝阅读 514评论 0 0
  • 本人是android开发的,由于最近React Native的火热,再加上自己完全不懂JS的语法,俗话说的好"落后...
    Bui_vlee阅读 352评论 0 0
  • [TOC] 参考阮一峰的ECMAScript 6 入门参考深入浅出ES6 let和const let和const都...
    郭子web阅读 1,915评论 0 1
  • ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,前...
    语目阅读 4,021评论 0 3
  • ECMAScript理解 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范 而我们学的...
    咻咻咻滴赵大妞阅读 4,622评论 0 3

友情链接更多精彩内容