JavaScript——屬性的檢測和枚舉

目錄

任務描述

相關知識

屬性的檢測

屬性的枚舉

編程要求

任務描述

本關任務:給定一個屬性的名字,請先判斷它屬于哪一個對象,然后返回該對象的所有自有屬性名連接成的字符串。 ? 如:school對象有三個自有屬性name,location,studentNum,如果給定name,你需要返回字符串namelocationstudentNum

相關知識

在 JavaScript 編程實踐中,如果我們調用別人的接口,常常需要了解實體是否具有某個屬性。

屬性的檢測

屬性的檢測指檢查對象是否有某個屬性或者方法,需要使用運算符inin的左側是屬性或者方法名,右側是檢查對象,對象有該屬性或者方法則返回true,否則返回false,如下:

var school = {name:"SJTU",location:"ShangHai",studentNum:40000,display:function() {console.log(this.name);}
};
// 檢測屬性
console.log("name" in school);    // 輸出true
console.log("sales" in school);    // 輸出false
// 檢測方法
console.log("display" in school);    // 輸出true
console.log("print" in school);    // 輸出false

?

這里的屬性名是字符串,必須用雙引號包含在內。

還可以用hasOwnProperty()檢測對象是否具有某個自有屬性或方法。括號內的參數是屬性或者方法的名字。

所謂自有屬性或者方法,是指對象自己定義的屬性或者方法,而不是從原型鏈上繼承來的。

var school = {name:"SJTU",location:"ShangHai",studentNum:40000,display:function() {console.log(this.name);}
};
console.log(school.hasOwnProperty("studentNum"));    // true
console.log(school.hasOwnProperty("hasOwnProperty"));    // false

因為hasOwnProperty方法繼承自object對象,不是自有方法,所以返回false

屬性的枚舉

定義:屬性的枚舉指按順序逐個的列出屬性的名字。如下面的例子:

var person = {name:"Ye",gender:"Gril",age:23,salary:23000,height:1.78
}

根據前面的知識,我們知道對象person有五個屬性,所謂枚舉,就是依次列出這五個屬性的名字,即:name、gender、age、salary、height,至于它們排列的順序,在不同的瀏覽器中的結果不同,這里不討論。 ? 在繼續下面的知識點之前,首先要知道一個概念:可枚舉性(enumerable),這是對象的屬性的一個性質,用戶自己定義的屬性默認為可枚舉,系統內置的對象的屬性默認為不可枚舉。

枚舉屬性有三種方法:

  • for...in...循環;

可以枚舉所有可枚舉的屬性,包括繼承的屬性。如下:

// 首先定義一個school對象,它從原型鏈上繼承的屬性都是不可枚舉的,而下面自定義的四個屬性或者方法都是可枚舉的
var school = {name:"SJTU",location:"ShangHai",studentNum:40000,display:function() {console.log(this.name);}
};
// 枚舉school的屬性
// 下面的圓括號中的att表示對象的屬性,school表示對象
for(var att in school) {// 依次輸出name,location,studentNum,displayconsole.log(att);
}

圓括號里面的表達式中,att表示對象的屬性,school表示該對象,這個循環將依次遍歷對象的所有可枚舉屬性,每次輸出一個屬性的值。

  • Object.getOwnPropertyNames()

括號中有一個參數,是要枚舉的對象。該表達式將返回對象的所有自有屬性的名字,不區分是否可枚舉,結果以字符串數組的形式呈現,如下:

// 定義一個school對象
var school = {name:"SJTU",location:"ShangHai",studentNum:40000,display:function() {console.log(this.name);}
};
// 為school對象增加一個不可枚舉的屬性range
Object.defineProperty(school, "range", {value: 4,    // 設置range屬性的值enumerable: false    // 設置range屬性為不可枚舉
});
// 輸出["name","location","studentNum","display","range"]
console.log(Object.getOwnPropertyNames(school));

如果用上面的for...in...循環,range屬性是不能夠枚舉到的。

  • Object.keys(); ? 括號中有一個參數,是要枚舉的對象。該表達式返回可枚舉的自有屬性,以字符串數組的形式。所以這里對屬性的要求更加嚴格,既要求是自有屬性,又要求可枚舉。 ?
var school = {name:"SJTU",location:"ShangHai",studentNum:40000,display:function() {console.log(this.name);}
};
// 為school對象增加一個不可枚舉的屬性range
Object.defineProperty(school, "range", {value: 4,    // 設置range屬性的值enumerable: false    // 設置range屬性為不可枚舉
});
// 輸出["name","location","studentNum","display"]
console.log(Object.keys(school));

?

總結一下上面三個方法對屬性是否自有,是否可枚舉的要求:

方法名是否要求可枚舉是否要求自有
for...in...
Object.getOwnPropertyNames()
Object.keys()

編程要求

本關的編程任務是補全右側代碼片段中 Begin 至 End 中間的代碼,具體要求如下:

  • 有兩個可選的對象orangecar,判斷給定的屬性名a屬于哪一個對象;

  • 返回該對象的所有自有屬性名組成的字符串,例如:如果判斷為car,則返回brandpricemodel

  • 給定的兩個對象的自有屬性都是可枚舉的;

var orange = {weight:"200g",color:"orange",taste:"sour"
};
var car = {brand:"Jaguar",price:"$80000",model:"XFL"
}
function mainJs(a){//請在此處編寫代碼/*********begin*********/var r = "";if (a in orange) {for (var s in orange) {r += s;}}else {for (var s in car) {r += s;}}return r;/*********end*********/
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/37374.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/37374.shtml
英文地址,請注明出處:http://en.pswp.cn/web/37374.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

達夢數據庫系列—15. 表的備份和還原

目錄 1、表備份 2、表還原 1、表備份 表備份和表還原恢復,都必須在聯機狀態下進行。 與備份數據庫與表空間不同,不需要備份歸檔日志,不存在增量備份之說。 CREATE TABLE TAB_FOR_RES_02(C1 INT);CREATE INDEX I_TAB_FOR_RES_02 ON TAB_F…

樹狀數組——點修區查與區修點查

樹狀數組是一種代碼量小,維護區間的數據結構 他可以實現: 1.區間修改,單點查詢 2.單點修改,區間查詢 當然,二者不可兼得,大人全都要的話,請選擇線段樹 前置知識: lowbit(x)操作…

如何安裝和配置Monit

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站。 關于 Monit Monit 是一個有用的程序,可以自動監控和管理服務器程序,以確保它們不僅保持在線,而且文…

Java與前端框架集成開發指南

Java與前端框架集成開發指南 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 引言 在當今互聯網應用開發中,Java作為一種強大的后端語言&#xff0…

程序人生 - (002)

作為一名程序員,在編程和軟件開發的過程中,通常會有一些深刻的感悟和體會。這些感悟不僅僅是關于技術的,也包括對工作的態度、職業的發展和人生的理解。 代碼即邏輯:編寫代碼不僅僅是使用編程語言,更重要的是用邏輯思維…

LDM論文解讀

論文名稱:High-Resolution Image Synthesis with Latent Diffusion Models 發表時間:CVPR2022 作者及組織:Robin Rombach, Andreas Blattmann, Dominik Lorenz,Patrick Esser和 Bjorn Ommer, 來自Ludwig Maximilian University of Munich &a…

獨一無二的設計模式——單例模式(Java實現)

1. 引言 親愛的讀者們,歡迎來到我們的設計模式專題,今天的講解的設計模式,還是單例模式哦!上次講解的單例模式是基于Python實現(獨一無二的設計模式——單例模式(python實現))的&am…

web全屏api,實現元素放大全屏,requestFullscreen,exitFullscreen

全屏api 主要方法 document.exitFullscreen(); 退出頁面全屏狀態,document是全局文檔對象 dom.requestFullscreen(); 使dom進入全屏狀態,異步,dom是一個dom元素 dom.onfullscreenchange(); 全…

專題四:Spring源碼初始化環境與BeanFactory

上文我們通過new ClassPathXmlApplicationContext("applicationContext.xml");這段代碼看了下Spring是如何將Xml里面內容注入到Java對象中,并通過context.getBean("jmUser");方式獲得了一個對象實例,而避開使用new 來耦合。今天我們…

【TB作品】智能臺燈控制器,ATMEGA128單片機,Proteus仿真

題目 8 :智能臺燈控制器 基于單片機設計智能臺燈控制器,要求可以調節 LED 燈的亮度,實現定時開啟與關閉, 根據光照自動開啟與關閉功能。 具體要求如下: (1)通過 PWM 功能調節 LED 燈亮度&#x…

【本地調試】使用 Nginx 和 Hosts 文件實現本地開發調試請求轉發

可以按照以下 nginx 配置來設置,通過 nginx 和 host 將網頁的請求轉發到本地的后端服務器,以方便本地開發調試 一、nginx 配置 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/js…

【Python】 數據分析中的常見統計量:中位數

那年夏天我和你躲在 這一大片寧靜的海 直到后來我們都還在 對這個世界充滿期待 今年冬天你已經不在 我的心空出了一塊 很高興遇見你 讓我終究明白 回憶比真實精彩 🎵 王心凌《那年夏天寧靜的海》 中位數(Median)是統計學…

深入淺出3D感知中的優化與基于學習的技術1(原創系列)

近期幾乎看了所有有關NERF技術論文,本身我研究的領域不在深度學習技術方向,是傳統的機器人控制和感知。所以總結了下這部分基于學習的感知技術,會寫一個新的系列教程講解這部分三維感知技術的發展到最新的技術細節,并支持自己最近…

娛樂圈發生震動,AI大模型技術已經取代了SNH48的小偶像?

自2023年以來,全球都被包裹在AI的驚天大潮之中,所有行業都在主動或被動地迎接改變。目前,各行業已經有大量公司正在把AI作為自身發展的最佳路徑。其中,娛樂行業作為最被人們熟知的行業也在面對AI的發展時,發生著巨大變…

解析Java中1000個常用類:Currency類,你學會了嗎?

在線工具站 推薦一個程序員在線工具站:程序員常用工具(http://cxytools.com),有時間戳、JSON格式化、文本對比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序員資料站 推薦一個程序員編程資料站:程序員的成長之路(http://cxyroad.com),收錄了一些列的技術教程…

解析connectionReset異常的原因與解決方案

解析connectionReset異常的原因與解決方案 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將深入探討Java中connectionReset異常的原因及其解決方案。這…

遙遠星辰中的覺醒:超大質量黑洞的蘇醒與人類的未來

遙遠星辰中的覺醒:超大質量黑洞的蘇醒與人類的未來 在浩渺無垠的宇宙中,星辰的閃爍仿佛是時間的漣漪,穿越億萬年的距離,抵達我們的眼眸。而在這片星辰大海的深處,一個驚人的現象正在悄然上演——距離地球3.6億光年之遙…

Unity獲取剪切板內容粘貼板圖片文件文字

最近做了一個發送消息的unity項目,需要訪問剪切板里面的圖片文字文件等,翻遍了網上的東西,看了不是需要導入System.Windows.Forms(關鍵導入了unity還不好用,只能用在純c#項目中),所以我看了下py…

GMSB文章九:微生物的相關關系組間波動

歡迎大家關注全網生信學習者系列: WX公zhong號:生信學習者Xiao hong書:生信學習者知hu:生信學習者CDSN:生信學習者2 介紹 計算配對微生物在組間的相關關系波動情況進而評估不同分組的微生物狀態。secom_linear 函數…

線性表與順序存儲結構(下)

前言 接上文(線性表與順序存儲結構(上))。 這些順序存儲結構的方法在順序表上下卷中已經提到過,但是有些許不同,可以為理解順序表提供更豐富的視角。(不過最主要的區別在于順序表上下卷中的順…