最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【JS笔记】三——JS对象基本用法

    正文概述 掘金(Lion7yu)   2021-03-12   511

    对象的含义

    对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

    //两种声明方式
    let obj = { 'name': 'lion', 'age': 18 }
    let obj2 = new Object({'name': 'lion'})
    console.log({ 'name': 'lion, 'age': 18 })
    


    上述代码种,大括号中就定义了一个对象,它被赋值给变量obj,所以变量obj就指向一个对象。该对象内部包含两个键值对(又称为两个“成员”),第一个键值对是'name: 'lion' ,其中 'name' 是“键名”(成员的名称),字符串 'lion' 是“键值”(成员的值)。键名与键值之间用冒号分隔。第二个键值对是 'age': '18','age' 是键名,'18' 是键值。两个键值对之间用逗号分隔。

    引号可以省略,省略之后就只能写标识符,就算引号省略了,键名也还是字符串

    对象的属性(增删改查)


    每个 key 都是对象的属性名(property)
    每个 value 都是对象的属性值

    对象的所有键名都是字符串,不是标识符,可以包含任意字符,如果键名是数值,会被自动转为字符串。

    var obj = {
      7: 'a',
      7.7: 'b',
      7e2: true,
      7e-2: true,
      .777: true,
      0xFF: true
    };
    obj
    // Object {
    //   7: "a",
    //   7.7: "b",
    //   700: true,
    //   0.07: true,
    //   0.777: true,
    //   255: true
    // }
    obj['100'] // true
    
    Object.keys(obj)
    => ["7", "225", "700", "7.7", "0.07", "0.234"]
    

    Object.keys(obj) 可以得到 obj 的所有 key

    如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。

    // 报错
    var obj = {
      1p: 'Hello World'
    };
    // 不报错
    var obj = {
      '1p': 'Hello World',
      'h w': 'Hello World',
      'p+q': 'Hello World'
    };
    


    属性的修改或增加



    #### 直接赋值 ```javascript let obj = {name: 'lion'} // name 是字符串 obj.name = 'lion' // name 是字符串 obj['name'] = 'lion' obj[name] = 'frank' // 错误语法 obj['na'+'me'] = 'lion'
    
    
    <a name="uA6AQ"></a>
    #### 批量赋值
    ```javascript
    let obj ={}
    Object.assign(obj, {'name':'lion',age: 18, gender: 'man'})
    //{age: 18, gender: "man", name: "lion"}
    

    共有属性的修改或增加


    无法通过自身修改或增加共有属性

    let obj = {}, obj2 = {} // 共有 toString
    obj.toString = 'xxx' //"xxx",只会在改 obj 自身属性
    obj2.toString //ƒ toString() { [native code] },还是在原型上
    
    

    强行修改或增加原型上的属性

    obj.__proto__.toString = 'xxx' // 不推荐用 __proto__
    Object.prototype.toString = 'xxx' 
    
    let obj = Object.create(common) //一开始就指定原型
    
    

    这一用法说明了只要用户找到原型就能修改原型里的所有属性,使得JS的属性都变得不可信了,体现了JS的脆弱性。一般来说,不要修改原型,会引起很多问题。

    属性的删除(delete 命令)



    delet命令最好只用来删除属性,删除对象要用其他方法,以下两种方法都能删除obj的 a 属性

    let obj = {a:1}
    Object.keys(obj) //["a"]
    
    delete obj.a //true
    obj.a // undefined
    Object,keys(obj) // []
    
    //或者
    
    delete obj['a']
    


    delete命令中,obj.name=undefined 和 delete obj.name 的区别

    let obj ={name:"fuck",age:18}
    obj.name=undefined //只删除属性值
    obj
    //{name:undefined,age:18}
    
    delete obj.name //连属性名一起删除
    obj
    //{age:18}
    


    要区分“属性值为 undefined ”和“不含属性名”的区别

    let obj={}
    let obj2={x:undefined}
    obj.x === undefined //true
    obj2.x===undefined //true
    'x' in obj //false
    

    这个例子中,obj不含属性名,obj2中属性名 'x' 的值为 undefined ,但它们都等于 undefined 故不能用obj.'属性名' === undefined 来判断'属性名’是否为obj的属性

    in函数只能判断有没有这个属性,不能判断是自身的还是共有的;obj.hasOwnProperty('属性')可以判断这个属性是自身的还是共有的

    属性的读取


    查看自身所有属性

    Object.keys(obj)
    

    查看自身+共有属性

    console.dir(obj)
    或者自己依次用 Object.keys 打印出 obj.__proto__
    

    判断一个属性是自身的还是共有的

    obj.hasOwnProperty('toString')
    

    属性的查看


    两种方法查看属性

    let obj = {a:1,b:2}
    obj['key'] //中括号语法
    obj.key //点语法
    //['a','b']
    
    obj[key] //错误语法
    


    要明确的区分字符串和变量的区别

    //这里的 name 是字符串,而不是变量
    obj.name === obj['name']
    obj.name !== obj[name] 
    
    let name = 'lion' 
    obj[name] === obj['lion'] 
    obj[name] !== obj['name']
    obj[name] !== obj.name
    
    


    起源地下载网 » 【JS笔记】三——JS对象基本用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元