• JavaScript object


    理解JavaScript对象

    对象是JavaScript的基本数据类型。对象是一种复合值:将很多值(原始值或者其他对象)聚合在一起。

    JavaScript对象不仅可以保持自有的属性,还可以从原型对象继承属性。对象的方法通常是继承的属性。原型式继承是JavaScript的核心特征。

    JavaScript对象是动态的——可以新增属性也可以删除属性,除了字符串,数字,true,false,null和undefined之外(当使用他们的属性方法时,会隐式的变成包装对象),JavaScript中的值都是对象。

    对象是可变的,我们通过引用而非值来操作对象,如果变量x是指向一个对象的引用,那么执行代码var y=x;变量y也是指向同一个对象的引用,而非这个对象的副本,通过变量y修改这个对象亦会对变量x造成影响。

    JavaScript规定,如果行首是大括号,一律解释为语句(即代码块)。如果要解释为表达式(即对象),必须在大括号前加上圆括号。

    对象的最常见的用法是:

    创建(create),设置(set),查找(query),删除(delete),检测(test),枚举(enumerate)它的属性。

    1.对象创建:

    对象的生成方法,通常有三种方法。除了像上面那样直接使用大括号生成({}),还可以用new命令生成一个Object对象的实例,或者使用Object.create方法生成。

    第一种:对象直接量
    var point={x:0,y:0;}
    
    第二种:通过new后面加上构造函数创建对象
    var o=new Object();
    
    第三种:通过Object.create方法生成
    var o=Object.create(null);//这个方法可以传入原型对象

    总结:一般来说,第一种采用大括号的写法比较简洁,第二种采用构造函数的写法清晰地表示了意图,第三种写法一般用在需要对象继承的场合。

    2.对象属性的设置与查询

    查询
    o.x或者o["x"]
    
    设置
    o.x=2或者o["x"]=2

    3.属性的删除

    delete o.x
    delete只能删除自由属性,不能删除继承属性

    4.属性的检测

    javascript对象可以看作属性的集合,我们经常会检测集合中成员的所属关系,判断某个属性是否存在于某个对象中。

    (1)in运算符

    运算符左侧是属性名,右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true。
    "x" in o

    (2)hasOwnProperty()

    用于检测给定的名字是否是对象的自有属性。对于继承属性它将返回false。
    o.hasOwnProperty("x")

    (3)propertyIsEnumerable()

    propertyIsEnumerable()是hasOwnProperty()的加强版,只有检测到是自有属性且这个属性的可枚举性为true时它才返回true
    o.propertyIsEnumerable("x")

    5.属性枚举

    通过使用for/in循环可以在循环体中遍历对象中所有可枚举的属性(包括自由属性和继承的属性)。对象继承的内置方法不可枚举,但是代码中给对象添加的属性都是可枚举的。
    
    示例:遍历对象的所有可枚举属性
    for(property in o){
    
    }
    
    示例:遍历对象的自有属性
    for(property in o){
        if(!o.hasOwnProperty(property)) continue; //跳过继承的属性
        console.log(property);//输出自有属性
    } 
    
    示例:跳过方法
    for(property in o){
        if(typeof o[property] === "function") continue; //跳过方法
    }   
  • 相关阅读:
    Eclipse 如何安装反编译插件
    java下执行mongodb
    如何利用Xshell在Linux下安装jdk
    asp.net signalR
    手机抓包 fiddler magicwifi
    NServiceBus 消息
    .net 异步函数 Async await
    .net 任务(Task)
    .net 线程基础 ThreadPool 线程池
    .net 序列化反序列化
  • 原文地址:https://www.cnblogs.com/xuye9893/p/10054838.html
Copyright © 2020-2023  润新知