zoukankan      html  css  js  c++  java
  • javaScript类型和对象

    javaScript (1)

    javaScript基本数据类型

    1. Undefined;
    2. Null;
    3. Boolean;
    4. String;
    5. Number;
    6. Symbol;
    7. Object。

    注意
    JavaScript 的代码 undefined 是一个变量而非关键字
    javaScript区分+0和-0 区分他们的方法是1 / x = ± infinity(无穷大)

    非整数NUMBER无法使用=比较
    检验最小精度值来判断是否相等

      console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);
    

    Symbol 是 ES6 中引入的新类型,它是一切非字符串的对象Key的集合
    创建Symbol使用全局Symbol函数

        var mySymbol = Symbol("my symbol");
    
    

    javaScript中的类只是对象的一个私有属性

    javaScript对象

    • 对象具有唯一标识性:即使完全相同的两个对象,也并非同一个对象。
    • 对象有状态:对象具有状态,同一对象可能处于不同状态之下。
    • 对象具有行为:即对象的状态,可能因为它的行为产生变迁。

    在 JavaScript 中,将状态和行为统一抽象为“属性”
    在javaScript中运行时可以向对象添加属性

        var o = { a: 1 };
        o.b = 2;
        console.log(o.a, o.b); //1 2
    
    

    JavaScript 对象的两类属性
    第一类属性,数据属性
    第二类属性是访问器(getter/setter)属性

    定义和查看属性

        var o = { a: 1 };
        Object.defineProperty(o, "b", {value: 2, writable: false, enumerable: false, configurable: true});
        //a 和 b 都是数据属性,但特征值变化了
        Object.getOwnPropertyDescriptor(o,"a"); // {value: 1, writable: true, enumerable: true, configurable: true}
        Object.getOwnPropertyDescriptor(o,"b"); // {value: 2, writable: false, enumerable: false, configurable: true}
        o.b = 3;
        console.log(o.b); // 2
    
    

    JavaScript 对象的运行时是一个“属性的集合”,属性以字符串或者 Symbol 为 key,以数据属性特征值或者访问器属性特征值为 value。
    {writable:true,value:1,configurable:true,enumerable:true}
    是 value,能够以 Symbol 为属性名,这是 JavaScript 对象的一个特色

    JavaScript 的原型

    • 如果所有对象都有私有字段 [[prototype]],就是对象的原型;
    • 读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。

    • Object.create 根据指定的原型创建新对象,原型可以是 null;
    • Object.getPrototypeOf 获得一个对象的原型;
    • Object.setPrototypeOf 设置一个对象的原型。
    var cat = {
        say(){
            console.log("meow~");
        },
        jump(){
            console.log("jump");
        }
    }
    
    var tiger = Object.create(cat,  {
        say:{
            writable:true,
            configurable:true,
            enumerable:true,
            value:function(){
                console.log("roar!");
            }
        }
    })
    
    
    var anotherCat = Object.create(cat);
    
    anotherCat.say();
    
    var anotherTiger = Object.create(tiger);
    
    anotherTiger.say();
    
    
    
    function c1(){
        this.p1 = 1;
        this.p2 = function(){
            console.log(this.p1);
        }
    } 
    var o1 = new c1;
    o1.p2();
    
    
    
    function c2(){
    }
    c2.prototype.p1 = 1;
    c2.prototype.p2 = function(){
        console.log(this.p1);
    }
    
    var o2 = new c2;
    o2.p2();
    
    

    第一种方法是直接在构造器中修改 this,给 this 添加属性。
    第二种方法是修改构造器的 prototype 属性指向的对象,它是从这个构造器构造出来的所有对象的原型。

    JavaScript 中的对象分类

    • 宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。

    • 内置对象(Built-in Objects):由 JavaScript 语言提供的对象。

      • 固有对象(Intrinsic Objects ):由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。
      • 原生对象(Native Objects):可以由用户通过 Array、RegExp 等内置构造器或者特殊语法创建的对象。
      • 普通对象(Ordinary Objects):由{}语法、Object 构造器或者 class 关键字定义类创建的对象,它能够被原型继承。
    -------------------------------------------------------------------------
    ## 极客时间全网最便宜最优惠购买方式,优惠券返现 百度网盘 微信关注公众号“选门好课”
    扫描下方二维码关注我的公众号"选门好课",与我一起交流知识
  • 相关阅读:
    【转载】 Deepmind星际争霸2平台使用第一轮-完成采矿
    【转载】 星际争霸2的AI环境搭建
    【转载】 强化学习(八)价值函数的近似表示与Deep Q-Learning
    【转载】 强化学习在美团“猜你喜欢”的实践
    【转载】 强化学习(七)时序差分离线控制算法Q-Learning
    【转载】 强化学习(六)时序差分在线控制算法SARSA
    【转载】 强化学习(五)用时序差分法(TD)求解
    【转载】 强化学习(四)用蒙特卡罗法(MC)求解
    ubuntu 系统网络突然"网络已禁用"
    健康日志之口腔粘膜----7-13
  • 原文地址:https://www.cnblogs.com/singworld/p/11593822.html
Copyright © 2011-2022 走看看