JavaScript内置对象-Object


▓▓▓▓▓▓ 大致介绍

  JavaScript的简单数据类型包括:Undefined、Null、Boolean、Number、String。JavaScript中这五种基本数据类型不是对象,其他所有值都是对象。其中还有一些对象子类型,通常被称为内置对象(引用类型)

    1、Object

    2、Array

    3、Date

    4、RegExp

    5、Function

    6、Boolean

    7、Number

    8、String

▓▓▓▓▓▓ 创建对象的三种方法

  创建对象有三种方法:

    1、对象字面量,即用{}生成,一个对象字面量就是包围在一对花括号中的零个或多个“名/值”对

    2、构造函数,利用Object()构造函数生成

    3、Object().create方法生成

    注意:推荐第一种写法,第三种方法多用在继承的场合

        var myobj = {
            key : value;
        }

        var myobj = new Object()
        myobj.key = value;

        var myobj = Object.create(Object.prototype);
        myobj.key = value;

▓▓▓▓▓▓ 引用

  对象通过引用来传递,它们永远不会被复制。简单来说就是多个变量指向同一个对象,那么他们都是这个对象的引用,多个变量它们都指向同一个内存地址,如果通过一个变量修改了指向的对象,那么所有指向这个对象的变量都会发生改变

        var o  = {
            name : 'laowang'
        };

        var b = o;
        b.name = 'liu';
        console.log(o.name); //liu

▓▓▓▓▓▓ 属性操作

  读取属性

  读取对象的属性有两种方法,一种是用点运算符,另一种是用方括号运算符

        var o  = {
            name : 'laowang'
        };

        o.name; //'laowang'
        o['name']; //'laowang'

  

  注意:点操作符要求属性名满足标示符的命名规范,而方括号运算符的方式可以接受任何字符串作为属性名

  例如:

        var o  = {
            name : 'laowang',
            'super-f' : 2
        };

        console.log(o.super-f); //报错
        console.log(o['super-f']); //2

  可以在方括号中括住一个字符串表达式的方式来访问属性

        var o  = {
            name1 : 'laowang',
            name2 : 'liaomou',
            name3 : 'PDD'
        };

        for(var i=1;i<4;i++){
            console.log(o['name'+i]);//laowang liaomou PDD
        };

  在对象中,属性名永远都是字符串,如果你使用String以外的其他值作为属性名,那他首先会被转换为一个字符串。即使是数字也不例外

        var myObject = {};

        myObject[true] = 'foo';
        myObject[2] = 't';

        myObject['true']; //"foo"
        myObject['2']; //"t"

  

  写入属性

  可以用点运算符和方括号运算符写入属性

        var myObject = {
            name : 'laowang'
        };

        //两种方法的效果是一样的

        var myObject = {};
        myObject.name = 'laowang';
        myObject[name] = 'laowang';

  

  

  查看属性

  可以使用Object.keys()方法

        var myObject = {
            name : 'laowang',
            address : '西青区'
        };

        console.log(Object.keys(myObject)); //["name", "address"] 

  删除属性

  删除属性可以用delete运算符,它不会触及原型链中的任何对象,删除对象的属性可能会让来自原型链中的属性透现出来

        var myObject = {
            name : 'laowang',
            address : 'xi'
        };

        var anotherObject = Object.create(myObject);
        anotherObject.name = 'xiaoma';
        console.log(anotherObject.name);

        delete anotherObject.name;
        console.log(anotherObject.name); //laowang  删除了自己本身的属性,透现出来了原型的属性

        delete anotherObject.address;
        console.log(anotherObject.address); //xi 不会删除原型中的属性

  检测属性是否存在

  我们要检测一个属性是否在对象中,可以使用in操作符

        var myObject = {
            name : 'laowang',
            address : 'xi'
        };

        console.log('name' in myObject); //true
        console.log('sex'in myObject); //false

  注意:in操作符会检查属性是否在对象及原型链中,如果要检测一个属性是否在对象中,不涉及原型链,可以使用hasOwnProperty()

        var myObject = {
            name : 'laowang',
            address : 'xi'
        };

        var anotherObject = Object.create(myObject);

        console.log('name' in anotherObject); //true
        console.log(anotherObject.hasOwnProperty('name')); //false

  遍历属性

  有时需要遍历一个对象的所有属性,可以使用for..in语句

        var myObject = {
            name : 'laowang',
            address : 'xi',
            sex : 'man'
        };

        for(var i in myObject){
            console.log(myObject[i]); //laowang xi man 
        };

  注意:for..in语句会遍历对象的可枚举属性,包括原型链

  例如:

        var myObject = {
            name : 'laowang',
            address : 'xi',
            sex : 'man'
        };

        //让myObject的name属性变得不可枚举
        Object.defineProperty(
                myObject,
                'name',
                {enumerable:false}
            );

        for(var i in myObject){
            console.log(myObject[i]); //xi man
        };

  如果想要过滤掉那些你不想要的值,最为常用的过滤器是hasOwnProperty方法,以及使用typeof来排除函数

 

参考资料:

      阮一峰JavaScript标准参考教程(alpha)-语法-对象

      JavaScript语言精粹第三章

      你不知道的JavaScript(上卷)第三章

      JavaScript高级程序设计(第三版)第五章 Object类型

优质内容筛选与推荐>>
1、python测试开发django-11.模型models详解
2、PHP的循环结构
3、数据类型1------核心数据类型
4、error while loading shared libraries: libudev.so.0 的问题
5、SpringData【Spring整合Hibernate】


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn