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

      

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/zhuyang/p/4366078.html
Copyright © 2011-2022 走看看