zoukankan      html  css  js  c++  java
  • JavaScript的检测属性、属性特性、枚举属性

    
    /*
    检测属性
    检测属性可以通过三种方式
    1.通过in运算符
    2.通过hasOwnPerperty()  如果给定的属性是继承属性将返回false
    3.通过propertyIsEnumerable():只有检测到的自有属性且这个属性的可枚举性为true时它才返回true,某些内置对象是不可枚举的,通常由JavaScript代码创建的对象的属性是可枚举的。
    */
    
    var o = { x: 1};
    
    "x" in o.x; //true
    "y" in o.x; //false
    "toString" in o.x //true o继承toString 属性
    
    
    o.hasOwnProperty("x"); //true
    o.hasOwnProperty("y"); //false
    o.hasOwnProperty("toString") //false:toString是继承来的属性
    
    o.propertyisEnumerable("x");  //true
    o.propertyisEnumerable("y");  //false
    Object.prototype.propertyIsEnumerable("toString");  //false
    
    //除了使用in运算符之外,别一种更简便的方法是使用“!==”判断一个属性是否是undefined
    
    o.x !== undefined; //true
    o.y !== undefined;  //false
    o.toString !== undefined; //true
    
    
    
    /*
    枚举属性:
    for/in循环可以在循环中遍历对象中所有可枚举属性(自有属性和继承属性),属性名称赋值给循环变量。对象继承内置方法不可枚举,但在代码中给对象添加的属性都是可枚举的
    */
    
    
    /*
    属性特性
    数据属性的四个特性:值(value)、可写性(writable)、可枚举性(enumerable)、可配置性(configurable).
    存取器属性的四个特性:取(get) 、 写入(set)、可枚举性和可配置性
    
    为了实现属性的查询和设置操作,ECMAScript5中定义了一个名字为"属性描述符"
    数据属性描述符:value writrable enumerable configurable
    
    通过调用Object.getOwnPropertyDescription()(只能得到自有属性的描述符)可以获得某个对象特定属性的属性描述符:
    
    //返回 {value: 1, writrable:true, enumerable:true, configuration:true}
    Object.getOwnPropertyDescrition({x:1}, "x");
    
    对于继承属性和不存在的属性:返回undefined
    
    要想设置属性的特性,歌者想让新建属性具有某种特性,则需要调用Object.definProperty(),传入要修改的对象、要创建或修改的属性的名称以及属性描述符对象;
    
    Object.definProperty(o, "x", {x:1, writable: true, enumerable: false, configurable: true});
    
    如果要同时修改或创建多个属性,则需要使用Object.defineproperties(),第一个参数是要修改的对象,第二个参数是一个映射表,它包含要新建或修改的属性的名称,以及它们的属性描述符,如:
    
    var p = Object.defineProperties({},{
    	x: {x:1, writable: true, enumerable: false, configurable: true},
    	y: {x:1, writable: true, enumerable: false, configurable: true},
    	r: {
    		get: function() {return Math.sqrt(this.x*this.x + this.y*this.y) },
    		enumerable: true,
    		configrable: true
    	}
    });
    */
    

      

  • 相关阅读:
    转发:招聘一个靠谱的 iOS
    转发:经典面试题
    APP上架证书无效:解决
    转发:Xcode插件
    Alcatraz:插件管理
    类似禅道的多条件搜索功能,比如或者并且和模糊查询和指定查询,见下图吧
    关于angularjs中,数据模型被改变,页面不刷新的解决办法
    angluar1+ionic详情页返回在原来的位置(缓存数据和页面高度)
    unable to resolve module react-native-gesture-handler from
    解决React Native:Error: Cannot find module 'asap/raw'
  • 原文地址:https://www.cnblogs.com/zhuyang/p/4366078.html
Copyright © 2011-2022 走看看