• 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
    	}
    });
    */
    

      

  • 相关阅读:
    给webstorm换个背景图
    css遮罩 mask属性
    svg图标
    BFC原理
    轮播图与图片查看器
    超大分辨率屏幕适配方案
    移动端适配-动态计算rem
    [Intervention] Unable to preventDefault inside passive event listener due to target being treated as passive. 报错
    由于ie浏览器ajax缓存 导致layui table表格重载失败的解决办法
    实现线程操作的三种方法
  • 原文地址:https://www.cnblogs.com/zhuyang/p/4366078.html
Copyright © 2020-2023  润新知