• js基础学习之-js对象的属性


    Js属性

    1. 设置属性

    1)  对象.

    2)  对象[‘属性名’]

    3)   GetAttribute函数

    2. 获取属性

    1)  变量=对象.

    2)  变量=对象[‘属性名’]

    3)  GetAttribute函数

    点和[]的区别:

      1.访问关键字和保留字属性时只能使用[]

        2.通过名称遍历属性时只能使用[]

      

     1 obj['class'] //class是保留字,E3是保留字,E5在非严格模式下依然是保留字
     2 obj['for']  //for是关键字
     3 //第5 版对使用关键字和保留字的规则进行了少许修改。关键字和保留字虽然仍然不能作为标识符使用,但现在可以用作对象的属性名。一般来说,最好都不要使用关键字和保留字作为标识符和属性名,以便与将来的ECMAScript 版本兼容。
    4 function displayProp(obj){ 5 var names=""; 6 for(var name in obj){ 7 names+=name+": "+obj[name]+", "; 8 } 9 alert(names); 10 }

    3. 删除属性

    1) Delete 对象.

    2)   Delete 对象[‘属性名’]

    1 delete person.age //即person不再有属性age
    2 
    3 delete person['age'] //或者这样 

    delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性

    1 var a = {p:{x:1}};
    2 var b = a.p;
    3 console.log(a.p.x); //1
    4 delete a.p;
    5 console.log(a.p.x); //TypeError a.p is undefined
    6 console.log(a.p); //undefined
    7 console.log(b.x); //1
    8  

    delete只能删除自有属性,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,当然,这会影响到所有继承来自这个原型的对象)

     1 function inherit(p){ 
     2   if(p == null){  // 不能从null中继承
     3     throw TypeError();
     4   }
     5   if(Object.create){  //如果有这个方法就直接使用
     6     return Object.create(p);
     7   }
     8   var t = typeof p;
     9   if(t !== "object" || t !== "function"){  //要继承的对象 类型要符合
    10     throw TypeError();
    11   }
    12   function f(){ }; //定义一个空的构造函数
    13   f.prototype = p; //原型指向要继承的对象p
    14   return new f();  //创建f对象,此对象继承自p
    15 }
    16  
    17 var obj = {x:1}; //用来构造函数
    18 var obj1 = inherit(obj); 
    19 obj1.y = 2;
    20 console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = 2
    21 delete obj1.x;
    22 delete obj1.y;
    23 console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = undefined x是原型创建的,y是obj变量本身的属性,所以只有y可以被删除

    可配置属性才能使用delete

     1 delete Object.prototype; // 不能删除 原型链不可配置
     2  
     3 function f(){ }
     4 delete this.f; //不能删除,函数是变量,是不可配置的
     5 
     6 var x = 1;
     7 delete this.x; //不能删除 是变量,是不可配置的
     8 
     9 this.y = 1;
    10 delete y; //这样可以删除,已经成为本身变量
    11  

    4. 检测属性 

    1)  in

    2)  hasOwnProperty()或者propertyIsEnumerable()

    3)  !==

    in 运算符希望它的左操作数是一个字符串或者可以转换为字符串,希望它的右操作数是一个对象

    1 var data = [5,6,7];
    2 console.log("0" in data); //有下标0
    3 console.log(1 in data);  //1可以转换成"1"
    4 console.log("4" in data); //下标只有 1 2 3
    5   
    6 var obj = {x:1};
    7 console.log("x" in obj); //true
    8 console.log("y" in obj); //false
    9 console.log("toString" in obj); //true 因为obj继承了这个方法

    使用hasOwnProperty()或者propertyIsEnumerable() --- 后者是前者的增强

    1 var obj = {x:1};
    2 console.log(obj.hasOwnProperty("x")); //true
    3 console.log(obj.hasOwnProperty("y")); //false
    4 console.log(obj.hasOwnProperty("toString")); //false 因为obj继承了这个方法,但不是它自己的

    只有检测到是自由属性并是可枚举的属性时,后者才返回true

    var obj = {x:1};
    console.log(obj.propertyIsEnumerable("x")); //true
    console.log(obj.propertyIsEnumerable("y")); //false
    console.log(obj.propertyIsEnumerable("toString")); //false 因为obj继承了这个方法,但不是它自己的
    console.log(Object.prototype.propertyIsEnumerable("toString")); //false 因为最原始的的 toString就是不可枚举的

    可以直接用 ”!=="运算符判断

    1 var obj = {x:1};
    2 console.log(obj.x !== undefined);//true
    3 console.log(obj.y !== undefined);//false
    4 console.log(obj.toString !== undefined); //true

    5. 枚举属性

    1 var obj = {x:1,y:2};
    2 for(p in obj){
    3  console.log(p);//x y
    4  console.log(obj.p);// undefined undefined
    5  console.log(obj[p]);//1 2
    6 } 
  • 相关阅读:
    win10下安装为知笔记的markdown插件
    最近一段时间的工作状态
    C++中的取余与取模
    来新项目后,最心虚的一个夜晚
    g++添加支持c++11的选项
    Linux ssh远程登陆方式:密码与公钥
    判断脚本加载完成
    解决ie6下最小高度问题
    display:inline-block的深入理解
    ff下button按钮上的文字垂直居中
  • 原文地址:https://www.cnblogs.com/x739400043/p/5618116.html
Copyright © 2020-2023  润新知