美文网首页
【js基础】数据类型、类与构造器

【js基础】数据类型、类与构造器

作者: SophieRabbit | 来源:发表于2020-07-15 11:32 被阅读0次

    1. 字符串最大长度: 2的53次方-1。但这指的并不是字符串长度,而是字符串的UTF16编码的长度。(U+0000 - U+FFFF范围)

    2. Number的双精度浮点数规则:有效整数范围是-0x1fffffffffffffff 至 0x1fffffffffffffff

    单精度浮点数(float)与双精度浮点数(double)的区别如下:

    (1)在内存中占有的字节数不同

    单精度浮点数在机内占4个字节

    双精度浮点数在机内占8个字节

    (2)有效数字位数不同

    单精度浮点数有效数字7位

    双精度浮点数有效数字16位

    (3)所能表示数的范围不同

    单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38

    双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308

    (4)在程序中处理速度不同

    一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快。

    根据浮点数定义,非整数的Number无法用==或者===来比较,比如 :

    0.1 + 0.2 === 0.3   // false

    正确的比较方法应该是这样:

    Math.abs( 0.1 + 0.2 - 0.3 <= Number.EPSILON )     //Number.EPSILON:最小精度值

    NaN:NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。

    3. Symbol: 一切非字符串的对象key的集合,整个对象系统被用Symbol重塑。详细见symbol的文章。

    4. JS中对对象的定义是“属性的集合”。属性包括数据属性和访问器属性。均为KEY-VALUE结构,key可以是字符串或者symbol类型。

    Number、String和Boolean三个构造器是两用的,和new搭配产生对象,直接调用时为强制类型转换。

    Symbol函数比较特殊,直接调用会报错,但仍然是Symbol对象的构造器。

    装箱操作:每一种基本类型都有对应的类,所谓装箱转换就是把基本类型转换为对应的临时对象。装箱机制会频繁产生临时对象,再一些对性能要求较高的场景下,因尽量避免基本类型做装箱转换。

    var sbObj = Object(Symbol('a'));

    console.log(typeof sbObj);  // object

    console.log(sbObj instanceof Symbol);  // true

    console.log(sbObj.constructor === Symbol);  // true

    拆箱转换:ToPrimitive函数,对象类型到基本类型的转换。

    JS中对象的独有特色: 高度动态性,运行时可以为对象添加状态和行为的能力。

    通常程序语言中的对象有下列几个特性:

    对象具有唯一标识性,看起来完全相同的对象,其实不相等。({a:1} !== {a:1})

    对象是有状态的,同一对象可能处于不同状态下。

    对象有行为,对象的状态可能因为行为而变化。

    在js中,对象的状态和行为都被抽象为属性了。

    var o = {

        d: 1,   // 状态

        f() { console.log(this.d) }   // 行为

    }

    为了提高抽象能力,JS的属性被设计成了数据属性和访问器属性(getter/setter)

    Object.defineProperty定义属性,getOwnPropertyDescriptor来查看属性。

    5. JS中的class:

    class Rectangle {

        constructor(h, w) {

            this.h = h;

            this.w = w;

        }

        get area() {   //Getter

            return this.calcArea();

        }

        calcArea() {  //Method

            return this.h * this.w;

        }

    }

    js中的class用extend来实现继承;不自动调用父类构造函数,不自动设置constructor。更少坑的设计。

    6.构造器

    function f() {

        return 1;

    }

    var v = f(); // 把f作为函数调用

    var o = new f(); //把f作为构造器调用

    答案看: https://blog.csdn.net/scaped/article/details/80036109

    相关文章

      网友评论

          本文标题:【js基础】数据类型、类与构造器

          本文链接:https://www.haomeiwen.com/subject/nohltktx.html