精华内容
下载资源
问答
  • JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性 判断是否包含某对象 我们知道访问对象属性有两种形式,如下: var obj = { name:'听风是风' }; obj.name; //听风是风 obj['name']; //听风是风 ...

    JS 判断对象属性是否存在,判断是否包含某个属性,是否为自身属性

    判断是否包含某对象

    我们知道访问对象属性有两种形式,如下:

    var obj = {
      name:'听风是风'
    };
    obj.name;   //听风是风
    obj['name'];   //听风是风
    

    那么马上有同学就想到用这两种形式判断对象是否包含某个属性,因为原型链上如果某个属性不存在就会返回undefined,比如:

    if(!obj.age){
        console.log('obj没有age属性');
    }
    

    这么做行不行,行,但是存在缺陷。最特殊的情况就是我们有age字段,而它的值偏偏就是 undefined,那这样就尴尬了。

    怎么办呢,一般推荐使用 in 运算符,用法是属性名 in 对象,如果存在返回 true,反之为 false,来看个例子:

    var echo = {
        name:'听风是风',
        job:undefined
    };
    console.log('name' in echo);   //true
    console.log('job' in echo);    //true
    console.log('age' in echo);    //false
    

    但需要注意的是,in 只能判断对象有没有这个属性,无法判断这个属性是不是自身属性,啥意思?咱们接着说。

    判断是否是自身属性

    一个最简单的构造函数创建实例的例子:

    function Parent(){
        this.name = 'echo';
    };
    Parent.prototype.age = 26;
    var o = new Parent();
    o.name//echo
    o.age//26
    

    在这个例子中,对于实例 o 而言,name 就是是自身属性,这是它自己有的,而 age 是原型属性,o 虽然没有这个属性,但在需要时,它还是顺着原型链找到了自己的老父亲 Parent,并借用了这个属性。

    所以当我们用 in 判断时可以发现结果均为 true:

    'name' in o;//true
    'age' in o;//true
    

    针对这个问题,如果我们还要判断是否是自身属性,就得借用方法hasOwnProperty(),不信你看:

    o.hasOwnProperty('name');//true
    o.hasOwnProperty('age');//false
    

    说到底hasOwnProperty()做了两件事,除了判断对象是否包含这个属性,还判断此属性是不是对象的自身属性。

    所以我们可以简单总结一下,如果我们只需判断对象有没有某个属性,使用 in 运算符就好了。而如果我们还要关心这个属性是不是自身属性,那么推荐hasOwnProperty()方法。

    说了这么多,这两个判断有什么使用场景呢?

    关于 in 运算符判断对象有没有某个属性,最常见的,我们希望给某个对象添加一个方法,直接添加又担心其他同事已经声明过,存在覆盖的可能性,所以使用 in 来判断,没有这个属性,咱们再加。

    当然针对这个问题,使用 Symbol 来确保对象 key 的唯一性也是不错的做法,这个就看实际场景了。

    而关于hasOwnProperty()这个方法呢,我目前遇到的就是深拷贝实现时会使用,因为我们知道每个对象都有原型,而深拷贝时我们只是希望拷贝对象的自身属性,使用此方法做个区分就是非常奈斯的做法了。

    好了,这篇文章就说到这里了,全文结束。

    转自:https://www.cnblogs.com/echolun/p/12377650.html

    展开全文
  • 属性可以包含对象

    千次阅读 2017-07-25 09:27:26
    属性可以包含对象 */ var animal = new Object(); animal.kind="狼"; animal.social=true; alert(animal.kind); animal.Kind = new Object(); animal.kindName="天狼"; alert(animal.kindName);
    /*
     属性中可以包含对象
     */
    var animal = new Object();
    animal.kind="狼";
    animal.social=true;
    alert(animal.kind);
    
    animal.Kind = new Object();
    animal.kindName="天狼";
    alert(animal.kindName);
    展开全文
  • JS面向对象之对象属性的属性

    千次阅读 2018-06-27 10:24:02
    ECMAScript的定义中,对象的属性有两种,一种是数据属性,另一种是访问器属性 ...下面就来聊聊对象属性的两种类别。   1.数据属性 这种属性包含有一个存放数据值的属性[[Value]],数据属性共有4个描述其行为的属...

    ECMAScript的定义中,对象的属性有两种,一种是数据属性,另一种是访问器属性

    我们知道JS中有基本数据类型和对象,对象中的属性也无外乎是这些类型,可是作为对象的属性,这些属性本身却也多了一些特殊的属性,而且属性种类的不同也会使属性的属性有些许的差别。下面就来聊聊对象属性的两种类别。

     

    1.数据属性

    这种属性包含有一个存放数据值的属性[[Value]],数据属性共有4个描述其行为的属性

    • [[Configurable]]:这个属性表示能否用delete语句删除属性,能否修改属性的属性。默认为true。
    • [[Enumerable]]:这个属性表示能否在使用for-in循环遍历对象属性时访问到该对象。默认为true。
    • [[Writable]]:这个属性表示能否修改属性的值。默认为true。
    • [[Value]]:这个属性用于存放属性的数据值。

     

    var course = {
        name: "Operation System"
    }

     

    在这个例子中我创建了一个course对象,这个对象有一个name属性,name这个属性的Configuralbe, Enumerable和Writable属性都为true,而Value属性则为"Operation System"。

     

    若是想要修改属性的属性,则必须使用Object.defineProperty()方法。该方法接受三个参数,第一个是属性所在对象,第二个是属性的名字,第三个是描述符对象(descriptor).描述符对象的属性只能是上述四种属性,但不一定全部都要有。例如

    Object.defineProperty(course, "name", {
        value: Assembler Language,
        writable: false
    })
    
    course.name = "English"
    alert(course.name) //Assembler Language

    我们把course的name属性的writalbe属性改成了false,将value属性改为"Assembler Language",也就是说name属性此时已经变为一个只读属性,所以当我们再次修改course的name属性时会发现修改无效。(若是在严格模式下会导致错误) 如果我们把name属性的configurable属性也改成false的话,则对属性的所有属性进行修改都会导致报错(也不能把configurable改回true)

    注:如果调用Object.defineProperty()方法来创建对象新属性,如果不指定,那么他的configuralbe, writable, enumerable属性全为false。

     

     

    2.访问器属性

    访问器属性不包括数据的值,但它包含有getter和setter函数(并不必须,只指定getter意味着只读,只指定setter意味只能写入)。同数据属性一样,访问器属性也包含四个描述其行为的属性。

    • [[Configurable]]:同上。
    • [[Enumerable]]:同上。
    • [[Get]]:在获取属性时调用的函数。
    • [[Set]]:在设置属性时调用的函数。

    注:访问器属性不能被直接定义,必须使用Object.defineProperty()方法

     

    var person = {
        _age: 20
    };
    
    Object.defineProperty(person, "age", {
        get: function(){
            return this._age;
        },
        set: function(){
            this._age++;
        }
    })

    在这个例子中,我创建了一个person对象,里面有一个_age属性并赋值为20,然后我们又通过Object.defineProperty()为person新定义了一个age属性,并定义了getter和setter函数。那么在每次对person对象的age属性进行修改时都会使_age自增。而在调用person.age时,也都返回的是person的_age属性。

    展开全文
  • 对象属性的遍历

    千次阅读 2016-07-06 17:24:00
    ES6中总共有5种对象属性遍历的方法。包括for...in,Object.keys,Object.getOwnPropertyNames,Object.getOwnPropertySymbols,Reflect.ownKeys。

    ES6中总共有5种对象属性遍历的方法。

    for…in

    for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)。

    Object.keys(obj)

    Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。

    Object.getOwnPropertyNames(obj)

    Object.getWonPropertyNames返回一个数组,包含对象自身的所有属性(不含Symbol属性,但包括不可枚举属性)。

    Object.getOwnPropertySymbols(obj)

    Object.getOwnPropertySymbols返回一个数组,包含对象自身所有的Symbol属性。

    Reflect.ownKeys(obj)

    Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不论属性名是Symbol或字符串,也不管不否可枚举。

    上面的5种对象属性遍历的方法,都遵守相同的属性遍历次序规则。
    - 首先,遍历所有属性名为数值的属性,按照数字排序;
    - 其次,遍历所有属性名为字符串的属性,按照生成时间排序;
    - 最后,遍历所有属性名为Symbol值的属性,按照生成时间排序。

    Reflect.ownKeys({[Symbol()]: 0, b: 0, 10: 0, 2: 0, a: 0});
    // ["2", "10", "b", "a", Symbol()]

    上面代码中,Reflect.ownKeys方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是:先是数值属性210,其次是字符串属性ba,最后是Symbol属性。

    展开全文
  • el表达式输出集合,集合中有对象,对象里还有对象属性,输出集合里对象里的对象的属性
  • python对象属性查看

    千次阅读 2018-08-04 15:09:03
    今天就总结一下在Python中有哪些函数可以查看对象属性。 1. type() type函数用于基本类型的判断,比如int,str等,也可以判断该对象属于那个函数或类,但对于继承类来说不是很方便。 2. isinstance() isinstance...
  • javascript 设置对象属性只读

    千次阅读 2019-03-07 16:58:02
    在设置对象属性只读之前,咱们先来了解一下对象的数据属性,所谓的数据属性就是包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。 [[Configurable]]:表示能否通过 delete ...
  • Mybatis 返回 对象属性包含 List(T)

    千次阅读 2019-07-04 14:06:49
    Mybatis 返回 对象属性包含 List<T>
  • @ApiModel(value = "IFieldResult", description = "判断类包含属性结果") public class IFieldResult<T> { private Boolean flag; private String type; private String table; private String hisValue; ...
  • 获取对象属性和原型属性

    千次阅读 2018-08-05 11:46:29
    5.for...in循环对象的所有枚举属性,然后再使用hasOwnProperty()方法来忽略继承属性 6.注意 hasOwnProperty 作为属性名 7.IE9下兼容写法遍历可枚举属性 1.Object.keys  返回该对象上所有...
  • 在Vue.js中判断某对象数组中某个对象属性值是否与传入的对象对应属性值相同 JavaScript访问对象属性用点号和中括号的区别: 点号后加标识符(静态的) 中括号放字符串,字符串可以是动态的,obj[‘string’+...
  • 对象属性分为原型属性和实例属性。 原型属性是定义在对象的原型(prototype)中的属性,而实例属性是添加的新属性。 Obejct.keys(obj),返回一个数组 用于获取对象自身所有的可枚举的属性值,但不包括原型中的属性...
  • 理解对象 ...数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有四个描述其特征的特性。(这些特性是为javascript内部引擎服务的,不能直接访问,所以将它们放在方括号中。) ...
  • ES 6中对象属性的遍历

    千次阅读 2020-01-08 10:33:33
    ES6 一共有 5 种方法可以遍历对象属性
  • 判断 json 对象是否包含某个属性

    千次阅读 2020-03-30 16:44:57
    判断 json 对象是否包含某个属性 hasOwnProperty hasOwnProperty() 判断对象是否包含特定的自身(非继承)属性,返回布尔值 IE 5.5+、FireFox、Chrome、Safari、Opera等主流浏览器均支持该函数。 Object....
  • 在js对象中调用对象属性

    千次阅读 2019-03-12 09:11:30
    有一个功能,需要在js对象中获取对象属性来进行计算 a={ b:1, c:function(){ return this.b } } 不能使用箭头函数 aaaa={ bbbb:1, cccc: ()=&gt; this.bbbb } 因为箭头函数不会绑定this,或者说箭头...
  • 判断对象中是否包含某个属性名 1.indexOf 可以判断数组是否包含某个值,返回该值对应的下标;对于不存在的值,返回-1; ES6还提供了其他几种判断对象是否包含属性名的方法: 2.in:属性名 in 对象(判断属性名...
  • 动态创建对象,并给对象属性赋值

    千次阅读 2018-07-24 10:04:28
    在开发过程中经常会遇到java对象属性特征不确定的情况,比如属性的名称,属性的类型,属性的取值等不确定的情况,如何在java运行时获取这些信息?动态的设置java对象属性值?借助java反射机制以及javassist能够...
  • 数据属性包含以下4个特性: [[configurable]]:表示属性是否可以被delete,是否可以被重新修改,或者是否可以被修改成访问器属性 [[enumerable]]:是否可枚举,是否能通过for in 循环返回该属性 [[writable]]: 是否...
  • JavaScript面向对象编程之对象属性

    千次阅读 2016-09-23 18:12:06
    对象的定义 ...ECMA-262将object定义为无序属性的集合,其属性可以包含基本值、对象或函数(相当于是一组没有特定顺序的值,类似于散列表)。下面让我们细细来看JavaScript中的对象。理解对象创建对象的最
  • // 方法: 显示Person对象属性信息的方法。 // 定义一个数组,用于存储Person对象,可以存储5个Person对象。 // 对象的属性信息,通过键盘录入的方式进行赋值。 // 遍历数组,显示对象的属性信息。 public ...
  • js判断对象为空以及有好几种方法了,但是个人觉得不是特别方便。 比如: 1、把对象通过 JSON.stringify 转为字符串,再判断字符串是否等于 " {} " 2、for in循环,判断key是否存在 3、jq的方法 es6已经帮我们很...
  • Js对象属性的相关操作

    千次阅读 2019-01-09 13:21:54
    对js对象属性常用操作3. 定义属性Object.defineProperty()4. 定义多个属性Object.defineProperties()5. 读取属性的描述对象Object.getOwnPropertyDescriptor() 1. 最常用的js对象是字面量形式的对象 例如:创建...
  • js中复制对象属性值给新的对象

    万次阅读 2019-07-05 17:10:32
    我们有一个对象,且包含很多属性值和方法,但是我们想把它的内部属性复制给一个新的对象时,我们如何去做呢? 你可能会说直接 a = b就可以了。 no no no,这样两个对象其实指针指向的还是一个内存中的对象,当一个...
  • java中一个对象属性可以有多少种 一个方法算是一个对象的行为,那么也就是它的对象了,是可以有无数种,还是有限制呢
  • js系列教程2-对象、对象属性全解

    千次阅读 2017-08-09 18:50:47
    //定义对象引用,或者var student1 = {},new Object()。所有的包装类都派生于Object。Object基类包含hasOwnProperty、isPrototypeOf、propertyIsEnumerable、toLocaleString、toString、valueOf方法 student1.name ...
  • thymeleaf判断对象是否包含某个属性

    千次阅读 2020-07-06 16:22:14
    th:if="${mssTable.get('descripition')}!=null" 使用对象.get(‘属性名称’)来判断这个属性是否存在
  • YuanGong.java 对象有以下属性 private int id; private String name; private String sal; private String sex; private Person person; private List&lt;Person&gt; pList; Person.java对象 ...
  • JSON对象属性名与属性值的提取

    千次阅读 2017-10-16 17:02:36
    我们有一个对象数组,里面存储着通讯录。函数 lookUp 有两个预定义参数:firstName值和prop属性 。函数将会检查通讯录中是否存在一个与传入的 firstName 相同的联系人。如果存在,那么还需要检查对应的联系人中是否...
  • 在日常开发中,前后端数据交互是最基础也是最...如果有更近一步的需求,可以将自定义对象内的集合属性的元素类型改为hashmap,从而支持更多的数据项取值遍历。如果读者朋友有更好的方法和建议,欢迎留言,谢谢!  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,702,724
精华内容 681,089
关键字:

对象的属性可以包含