JavaScript知识体系梳理

123 阅读2分钟
   运行时
   文法
   执行过程

1. 类型(运行时)

  • 都有哪些类型?

  • 为什么有的编程规范要求用 void 0 代替 undefined ***

  • 字符串有最大长度吗 ***

  • 0.1 + 0.2 不等于0.3 为啥 ***

  • Symbol是啥 ***

  • 为什么给对象添加的方法能用在基本类型上? ***

  • 3和new Number(3)是不是同一个值?***

      1. 都有哪些类型?
          undefined null
          object
          number
          string
          boolean
          symbol
      2. 列个表格展示各个类型
    
类型 undefined null
表示? 未定义 定义了,值为空
缺点: 可以被覆盖,建议用void 0代替 短文本
是否关键字?


类型 string number boolean
表示? 字符串 数字 布尔
字符串一旦创建出来,无法改变,所以具有值类型的特征*** js中0分为+0和-0,区分 +0 和 -0 的方式,正是检测 1/x 是 Infinity 还是 -Infinity。***
浮点数运算的精度问题导致0.1 + 0.2不等于0.3; 正确的比较方式是console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON); ***
是否关键字? 是 true false
非整数的number类型无法用== 或者===比较 ***


类型 object symbol
表示? 对象 非字符串的对象key的集合 ***
有什么用? js中的核心类型,标识一切有形和无形物体的总称 不会跟其他属性名冲突 ***
属性的集合: 分为数据属性和访问器属性 二者都是key - value ***
是否关键字?
如何创建? var obj = new Object() var a = Symbol() ***
是否可以隐士转换? 否 但是可以显示转换 boolean *** 否 但是可以显示转换string boolean ***


symbol:

对象的Symbol.iterator属性,指向该对象的默认遍历器方法。***

对象进行for...of循环时,会调用Symbol.iterator方法,返回该对象的默认遍历器。***

<!--***-->
    var o = new Object

    o[Symbol.iterator] = function() {
        var v = 0
        return {
            next: function() {
                return { value: v++, done: v > 10 }
            }
        }        
    };

    for(var v of o) 
        console.log(v); // 0 1 2 3 ... 9



Object

object 跟基本类型中重叠的对象 两用的构造器***
------ Number, String, Boolean, Symbol *** Number, String, Boolean
------ Symbol用new 会报错 *** 1. new xx(产生对象) 2. 直接调用(强制类型转换)***


2. 类型转换 (横转换成数列)

------ null undefined boolean(true) boolean(false) number string symbol object
boolean false false -- -- 0(false) 非0(true) 空串(false) 非空串(true) *** -- --
number 0 0 非0 0 -- 正常转 正常装 不支持
string 'null' 'undefined' 'true' 'false' 正常转 tostring() ------ 不支持
object -- -- 装箱转换*** 装箱转换*** 装箱 装箱 -- --