最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS 對(duì)象屬性相關(guān)(檢查屬性、枚舉屬性等)

 更新時(shí)間:2015年04月05日 01:03:30   投稿:mdxy-dxy  
這篇文章主要介紹了JS 對(duì)象屬性相關(guān)(檢查屬性、枚舉屬性等),需要的朋友可以參考下

1.刪除屬性

delete運(yùn)算符可以刪除對(duì)象的屬性

復(fù)制代碼 代碼如下:

delete person.age //即person不再有屬性age
delete person['age'] //或者這樣

delete只是斷開屬性和宿主對(duì)象的聯(lián)系,而不會(huì)去操作屬性中的屬性 看到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只能刪除自有屬性,不能刪除繼承屬性(要?jiǎng)h除繼承屬性必須從定義這個(gè)屬性的原型對(duì)象上刪除它,當(dāng)然,這會(huì)影響到所有繼承來(lái)自這個(gè)原型的對(duì)象)

function inherit(p){ 
  if(p == null){  // 不能從null中繼承
    throw TypeError();
  }
  if(Object.create){  //如果有這個(gè)方法就直接使用
    return Object.create(p);
  }
  var t = typeof p;
  if(t !== "object" || t !== "function"){  //要繼承的對(duì)象 類型要符合
    throw TypeError();
  }
  function f(){ }; //定義一個(gè)空的構(gòu)造函數(shù)
  f.prototype = p; //原型指向要繼承的對(duì)象p
  return new f();  //創(chuàng)建f對(duì)象,此對(duì)象繼承自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

當(dāng)然了,可配置的屬性才能用到delete
比如

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

var x = 1;
delete this.x; //不能刪除
this.y = 1;
delete y; //這樣可以刪除

function f(){ }
delete this.f; //不能刪除

2.檢測(cè)屬性

使用 “in"

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

var data = [5,6,7];
console.log("0" in data); //有下標(biāo)0
console.log(1 in data);  //1可以轉(zhuǎn)換成"1"
console.log("4" in data); //下標(biāo)只有 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 因?yàn)閛bj繼承了這個(gè)方法

使用hasOwnProperty()或者propertyIsEnumerable() --- 后者是前者的增強(qiáng)
顧明思議

var obj = {x:1};
console.log(obj.hasOwnProperty("x")); //true
console.log(obj.hasOwnProperty("y")); //false
console.log(obj.hasOwnProperty("toString")); //false 因?yàn)閛bj繼承了這個(gè)方法,但不是它自己的

只有檢測(cè)到是自由屬性并是可枚舉的屬性時(shí),后者才返回true

var obj = {x:1};
console.log(obj.propertyIsEnumerable("x")); //true
console.log(obj.propertyIsEnumerable("y")); //false
console.log(obj.propertyIsEnumerable("toString")); //false 因?yàn)閛bj繼承了這個(gè)方法,但不是它自己的
console.log(Object.prototype.propertyIsEnumerable("toString")); //false 因?yàn)樽钤嫉牡?toString就是不可枚舉的

當(dāng)然,也可以直接用 ”!=="運(yùn)算符判斷

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:

每個(gè)對(duì)象都有與之相關(guān)的原型(prototype)、類(class)、可擴(kuò)展性(extensible)
要檢測(cè)一個(gè)對(duì)象是否是另一個(gè)對(duì)象的原型(或處于原型鏈中),可以使用isPrototypeOf()方法

var p = {x:1}; //p原型對(duì)象繼承自O(shè)bject.prototype
var o = Object.create(p); //o對(duì)象繼承自p

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

當(dāng)然,isPrototypeOf()方法和instanceof運(yùn)算符非常類似
instanceof運(yùn)算符希望它的左操作數(shù)是一個(gè)對(duì)象,右操作數(shù)標(biāo)識(shí)對(duì)象的類。如果左側(cè)的對(duì)象是右側(cè)類的實(shí)例,則表達(dá)式返回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:

對(duì)象的類屬性是一個(gè)字符串,用以表示對(duì)象的類型信息

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

比如

復(fù)制代碼 代碼如下:

var obj = {x:1,y:2};
console.log(obj.toString());//[object Object]

所以要想獲取對(duì)象的類,就可以通過(guò)返回的字符串中找出 “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
//注意,實(shí)際上是這些類型的變量調(diào)用toString()方法,而不是通過(guò)他們自身直接調(diào)用
//console.log(1.toString()); //會(huì)報(bào)錯(cuò)
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

相關(guān)文章

  • Javascript 檢測(cè)、添加、移除樣式(className)函數(shù)代碼

    Javascript 檢測(cè)、添加、移除樣式(className)函數(shù)代碼

    在前臺(tái)腳本中,我們經(jīng)常要操作頁(yè)面元素的樣式,比如標(biāo)簽頁(yè)切換時(shí),將當(dāng)前標(biāo)簽加上一個(gè)樣式,當(dāng)切換到其他標(biāo)簽時(shí),再將樣式還原,本文介紹的是直接添加和移除 className 的方法。
    2009-09-09
  • Javascript 閉包詳解及實(shí)例代碼

    Javascript 閉包詳解及實(shí)例代碼

    這篇文章主要介紹了Javascript 閉包詳解及實(shí)例代碼的相關(guān)資料,閉包是一個(gè)特別抽象的概念,特別是ECMA規(guī)范給的定義,如果沒有實(shí)戰(zhàn)經(jīng)驗(yàn),很難從定義去理解它,需要的朋友可以參考下
    2016-11-11
  • 微信小程序去除左上角返回鍵的實(shí)現(xiàn)方法

    微信小程序去除左上角返回鍵的實(shí)現(xiàn)方法

    這篇文章主要介紹了微信小程序去除左上角返回鍵的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • JS 正則表達(dá)式驗(yàn)證密碼、郵箱格式的實(shí)例代碼

    JS 正則表達(dá)式驗(yàn)證密碼、郵箱格式的實(shí)例代碼

    這篇文章主要介紹了JS 正則表達(dá)式驗(yàn)證密碼、郵箱格式的實(shí)例代碼,需要的朋友可以參考下
    2018-10-10
  • java與javascript之間json格式數(shù)據(jù)互轉(zhuǎn)介紹

    java與javascript之間json格式數(shù)據(jù)互轉(zhuǎn)介紹

    對(duì)象轉(zhuǎn)為字符串:通過(guò)JSON.encode方法,這個(gè)是json.js里面的方法,引入到當(dāng)前文件就可以了,下面整理的比較詳細(xì)一點(diǎn),感興趣的朋友不要錯(cuò)過(guò)
    2013-10-10
  • 微信小程序云開發(fā)之使用云函數(shù)

    微信小程序云開發(fā)之使用云函數(shù)

    這篇文章主要為大家詳細(xì)介紹了微信小程序云開發(fā)之使用云函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Electron 隱藏頂部菜單功能實(shí)現(xiàn)

    Electron 隱藏頂部菜單功能實(shí)現(xiàn)

    本文介紹了如何在Electron應(yīng)用中隱藏頂部菜單,具體方法是在main.js文件中添加一行代碼,這是一個(gè)簡(jiǎn)單有效的技巧,適用于需要簡(jiǎn)化界面的Electron應(yīng)用
    2024-09-09
  • JS實(shí)現(xiàn)逐頁(yè)將PDF文件轉(zhuǎn)為圖片格式

    JS實(shí)現(xiàn)逐頁(yè)將PDF文件轉(zhuǎn)為圖片格式

    這篇文章主要為大家分享了如何通過(guò)前端js將pdf文件轉(zhuǎn)為圖片格式,并且支持翻頁(yè)預(yù)覽、以及圖片打包下載,文中的示例代碼簡(jiǎn)潔易懂,需要的可以參考一下
    2023-05-05
  • JS監(jiān)聽和響應(yīng)DOM元素的變化的方法

    JS監(jiān)聽和響應(yīng)DOM元素的變化的方法

    在前端開發(fā)中,處理動(dòng)態(tài)變化的 DOM(文檔對(duì)象模型)很是常見的需求,比如自動(dòng)化測(cè)試中,可能需要監(jiān)控 DOM 變化來(lái)驗(yàn)證測(cè)試條件,在用戶填寫表單時(shí),某些字段需要即時(shí)驗(yàn)證等,所以本文給大家介紹了JS監(jiān)聽和響應(yīng)DOM元素的變化的方法,需要的朋友可以參考下
    2024-09-09
  • 淺談Webpack下多環(huán)境配置的思路

    淺談Webpack下多環(huán)境配置的思路

    這篇文章主要介紹了淺談Webpack下多環(huán)境配置的思路,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06

最新評(píng)論

栾川县| 泽普县| 兴国县| 大洼县| 平度市| 梁河县| 射洪县| 工布江达县| 青河县| 琼中| 怀柔区| 黑龙江省| 万载县| 铜梁县| 界首市| 龙井市| 崇文区| 邳州市| 河西区| 攀枝花市| 郁南县| 临沂市| 珲春市| 榆中县| 金塔县| 长春市| 全州县| 凌源市| 富平县| 自治县| 莱州市| 平谷区| 莱西市| 辽阳县| 新乡市| 康乐县| 晋州市| 光泽县| 佛冈县| 万荣县| 尖扎县|