茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    JS 對象屬性相關(檢查屬性、枚舉屬性等)
    來源:易賢網(wǎng) 閱讀:950 次 日期:2015-04-08 14:12:02
    溫馨提示:易賢網(wǎng)小編為您整理了“JS 對象屬性相關(檢查屬性、枚舉屬性等)”,方便廣大網(wǎng)友查閱!

    1.刪除屬性

    delete運算符可以刪除對象的屬性

    代碼如下:

    delete person.age //即person不再有屬性age

    delete person['age'] //或者這樣

    delete只是斷開屬性和宿主對象的聯(lián)系,而不會去操作屬性中的屬性 看到delete a.p之后b.x仍然為1

    var a = {p:{x:1}};

    var b = a.p;

    console.log(a.p.x); //1

    delete a.p;

    console.log(a.p.x); //TypeError a.p is undefined

    console.log(a.p); //undefined

    console.log(b.x); //1

    delete只能刪除自有屬性,不能刪除繼承屬性(要刪除繼承屬性必須從定義這個屬性的原型對象上刪除它,當然,這會影響到所有繼承來自這個原型的對象)

    function inherit(p){

    if(p == null){ // 不能從null中繼承

    throw TypeError();

    }

    if(Object.create){ //如果有這個方法就直接使用

    return Object.create(p);

    }

    var t = typeof p;

    if(t !== "object" || t !== "function"){ //要繼承的對象 類型要符合

    throw TypeError();

    }

    function f(){ }; //定義一個空的構造函數(shù)

    f.prototype = p; //原型指向要繼承的對象p

    return new f(); //創(chuàng)建f對象,此對象繼承自p

    }

    var obj = {x:1};

    var obj1 = inherit(obj);

    obj1.y = 2;

    console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = 2

    delete obj1.x;

    delete obj1.y;

    console.log("x = "+obj1.x+" y = "+obj1.y); //x = 1 y = undefined

    當然了,可配置的屬性才能用到delete

    比如

    delete Object.prototype; // 不能刪除 不可配置

    var x = 1;

    delete this.x; //不能刪除

    this.y = 1;

    delete y; //這樣可以刪除

    function f(){ }

    delete this.f; //不能刪除

    2.檢測屬性

    使用 “in"

    in 運算符希望它的左操作數(shù)是一個字符串或者可以轉換為字符串,希望它的右操作數(shù)是一個對象

    var data = [5,6,7];

    console.log("0" in data); //有下標0

    console.log(1 in data); //1可以轉換成"1"

    console.log("4" in data); //下標只有 1 2 3

    var obj = {x:1};

    console.log("x" in obj); //true

    console.log("y" in obj); //false

    console.log("toString" in obj); //true 因為obj繼承了這個方法

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

    顧明思議

    var obj = {x:1};

    console.log(obj.hasOwnProperty("x")); //true

    console.log(obj.hasOwnProperty("y")); //false

    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就是不可枚舉的

    當然,也可以直接用 ”!=="運算符判斷

    var obj = {x:1};

    console.log(obj.x !== undefined);//true

    console.log(obj.y !== undefined);//false

    console.log(obj.toString !== undefined); //true

    3.枚舉屬性

    var obj = {x:1,y:2};

    for(p in obj){

    console.log(p);//x y

    console.log(obj.p);// undefined undefined

    console.log(obj[p]);//1 2

    }

    拓展1:

    每個對象都有與之相關的原型(prototype)、類(class)、可擴展性(extensible)

    要檢測一個對象是否是另一個對象的原型(或處于原型鏈中),可以使用isPrototypeOf()方法

    var p = {x:1}; //p原型對象繼承自Object.prototype

    var o = Object.create(p); //o對象繼承自p

    console.log(p.isPrototypeOf(o));//true

    console.log(Object.prototype.isPrototypeOf(o));//true

    console.log(Object.prototype.isPrototypeOf(p));//true

    當然,isPrototypeOf()方法和instanceof運算符非常類似

    instanceof運算符希望它的左操作數(shù)是一個對象,右操作數(shù)標識對象的類。如果左側的對象是右側類的實例,則表達式返回true,否則返回false

    var p = {x:1};

    console.log(p instanceof Object);//true

    var d = new Date();

    console.log(d instanceof Date);//true

    console.log(d instanceof Object);//true

    console.log(d instanceof Number);//false

    拓展2:

    對象的類屬性是一個字符串,用以表示對象的類型信息

    一般調用toString()方法后返回形如 [object class]的形式

    比如

    代碼如下:

    var obj = {x:1,y:2};

    console.log(obj.toString());//[object Object]

    所以要想獲取對象的類,就可以通過返回的字符串中找出 “class"字段 使用 slice(8,-1)

    比如

    function classOf(obj){ // 找出類名

    if(obj === null){

    return "Null";

    }

    if(obj === undefined){

    return "Undefined";

    }

    return Object.prototype.toString.call(obj).slice(8,-1);

    }

    console.log(classOf(1)); //Number

    //注意,實際上是這些類型的變量調用toString()方法,而不是通過他們自身直接調用

    //console.log(1.toString()); //會報錯

    var a = 1;

    console.log(Number(1).toString()); //1

    console.log(a.toString()); //1

    console.log({x:1}.toString()); //[object Object]

    console.log(classOf(1)); //Number

    console.log(classOf("")); //String

    console.log(classOf("str")); //String

    console.log(classOf(null)); //Null

    console.log(classOf(false)); //Boolean

    console.log(classOf({})); //Object

    console.log(classOf([])); //Array

    console.log(classOf(new Date())); //Date

    function f(){}

    console.log(classOf(new f())); //Object

    更多信息請查看IT技術專欄

    更多信息請查看腳本欄目
    易賢網(wǎng)手機網(wǎng)站地址:JS 對象屬性相關(檢查屬性、枚舉屬性等)

    2026上岸·考公考編培訓報班

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網(wǎng)