摘要:張無忌對象的屬性存在對象的屬性不存在使用進行判斷。張無忌對象的屬性存在請先定義對象的屬性使用語句進行判斷張無忌對象的屬性存在刪除對象的屬性可以用操作符刪除一個不是繼承而來的屬性。
對象 對象的概述 對象是什么
JavaScript中的對象,和其他編程語言中的對象一樣??梢詫Ρ痊F(xiàn)實生活中的一些東西來理解他。
在JavaScript中,一個對象可以使一個單純的擁有屬性和類型的實體。假如和一個杯子相比較,一個杯子是一個對象,擁有屬性。杯子有顏色、圖案、重量等。同樣,JavaScript對象也有屬性來定義它的特征。
方法是關(guān)聯(lián)到某個對象的函數(shù),或者簡單來說,一個方法是一個值為某和函數(shù)的對象屬性。定義方法就像定義普通的函數(shù),出了他們必須被賦給對象的某個屬性。
1.內(nèi)置對象/原生對象
就是JavaScript語言預(yù)定義的對象。在ECMAScript標(biāo)準(zhǔn)定義,有JavaScript解釋器/引擎提供具體實現(xiàn)。
2.宿主對象
指的是JavaScript運行環(huán)境提供的對象。一般由瀏覽器廠商提供實現(xiàn)(目前也有獨立的JavaScript解釋器/引擎提供實現(xiàn)),主要分文BOM和DOM。
3.自定義對象
就是由開發(fā)人員自主創(chuàng)建的對象。
對象的初始化器常見方式,代碼如下;
Object類型與Array、Math等一樣都是JavaScript的引用類型。不過Object類型是JavaScript中所有類型的父級(所有類型的對象都可以使用Object的屬性和方法)。
JavaScript可以通過Object的構(gòu)造函數(shù)來創(chuàng)建自定義對象。當(dāng)以非構(gòu)造函數(shù)形式被調(diào)用時,Object等同于new Object()。
使用對象初始化器也被稱作通過字面值創(chuàng)建對象。
1.對象的初始化器創(chuàng)建方式 var 對象名 = { 屬性名 : 屬性值, 方法名 : function(){ 方法體 } } var obj1 = { name : "張無忌", age : 18, sayMe : function(){ console.log("我是張無忌"); } }構(gòu)造函數(shù)方式
構(gòu)造函數(shù)時通過JavaScript提供的預(yù)定義類型的構(gòu)造函數(shù)來創(chuàng)建對象的。
代碼如下;
對象的構(gòu)造函數(shù)方式 利用所有引用類型創(chuàng)建對應(yīng)的對象 -> 具有具體的類型 var num = new Number();// Number類型 var str = new String();// String類型 var boo = new Boolean();// Boolean類型 利用Object作為構(gòu)造函數(shù)創(chuàng)建對象 var 對象名 = new Object(); var 對象名 = Object(); var num = new Number();//Number類型 var num2 = Number(); var str = new String();//String類型 var boo = new Boolean();//Boolean類型 var obj2 = new Object(); var obj3 = Object(); console.log(obj2);//{}空對象 console.log(obj3);//{}空對象 var obj4 = new Object(undefined); var obj5 = new Object(null); console.log(obj4);//{}空對象 console.log(obj5);//{}空對象Object.create()方法
Object.create()方法創(chuàng)建一個擁有指定原型和若干個指定屬性的對象。
參數(shù);
1.proto參數(shù);一個對象,作為新創(chuàng)建對象的原型
2.propertiesObject參數(shù);可選。該參數(shù)對象是一組屬性與值,該對象的屬性名稱試試創(chuàng)建的對象的屬性名稱,值是屬性描述符。
代碼如下;
利用Object.create()方法創(chuàng)建對象 var 對象名 = Object.create(null) -> 創(chuàng)建一個空對象 var 對象名 = Object.create(obj) obj - 表示另一個對象 特點 - 當(dāng)前創(chuàng)建的新對象擁有與obj對象相同的屬性和方法 var obj6 = Object.create(null); var obj7 = Object.create(obj1);對象的屬性 定義對象的屬性
一個JavaScript對象有很對屬性。一個對象的屬性可以解釋成一個附加到對象的變量。對象的屬性和普通的JavaScript變量基本沒有什么區(qū)別,僅僅是屬性屬于某個對象。
var obj = { name : "張無忌", "Type-Content" : "text/html", sayMe : function(){ console.log("我是張無忌"); } } /* 1.對象名.屬性名 * 不適用于復(fù)雜命名的屬性名稱 */ console.log(obj.name);// 張無忌 // console.log(obj.Type-Content); 2.對象名[屬性名] - 通用的調(diào)用方式 適用于復(fù)雜命名的屬性名稱 console.log(obj["name"]);// 張無忌 console.log(obj["Type-Content"]);// text/html 訪問一個對象不存在的屬性 -> 值為 undefined console.log(obj.age);訪問對象的屬性
1.JavaScript可以通過點符號來訪問一個對象的屬性。
var emp = { ename:"Tom",salary:3500 }; emp.ename = "Tommy"http://修改屬性的值 console.log(emp.ename);//獲取屬性的值
2.JavaScript對象的屬性也可以通過方括號訪問。
var emp = { ename:"Tom",salary:3500 }; emp["ename"] = "Tony";//修改屬性的值 console.log(emp["ename"]);//獲取屬性的值遍歷屬性
JavaScript提供了三種原生方法用于遍歷或枚舉對象的屬性;
1.for...in循環(huán):該方法依次訪問一個對象及其原型鏈中所有課枚舉的屬性。
2.Objectkeys(object)方法:該方法返回一個對象o自身包含(不包括原型中)的所有屬性的名稱的數(shù)組。
3.ObjectgetOwnpropertyNames(object)方法:該方法返回一個數(shù)組,他包含了對象o所有擁有的屬性(無論是否可枚舉)的名稱。
var obj = { name : "張三", age : 18, sayMe : function(){ console.log("我是張三"); } } // 1.for...in語句 for (var objAttr in obj) { // 通過對象屬性或方法對應(yīng)的值的類型進行區(qū)別 if (obj[objAttr] instanceof Function) { // 當(dāng)前是對象的方法 obj[objAttr](); } else { // 當(dāng)前是對象的屬性 console.log(obj[objAttr]); } } // 2.Object類型提供了keys()方法 - 只能遍歷可枚舉的屬性 var arr = Object.keys(obj); for (var v in arr) { var objAttr = arr[v]; // 通過對象屬性或方法對應(yīng)的值的類型進行區(qū)別 if (obj[objAttr] instanceof Function) { // 當(dāng)前是對象的方法 obj[objAttr](); } else { // 當(dāng)前是對象的屬性 console.log(obj[objAttr]); } } // 3.Object類型提供了getOwnPropertyNames()方法 - 包括不可枚舉的屬性 var arr = Object.getOwnPropertyNames(obj); for (var v in arr) { var objAttr = arr[v]; // 通過對象屬性或方法對應(yīng)的值的類型進行區(qū)別 if (obj[objAttr] instanceof Function) { // 當(dāng)前是對象的方法 obj[objAttr](); } else { // 當(dāng)前是對象的屬性 console.log(obj[objAttr]); } }屬性訪問出錯
當(dāng)不確定對象是否存在、對象的屬性是否存在時,可以使用錯誤處理結(jié)構(gòu)try...catch語句塊來捕捉拋出的錯誤,避免程序異常終止。
//訪問未聲明的變量 console.log(emp); //訪問未聲明的屬性 var emp = {}; console.log(emp.ename); //訪問未聲明的屬性的成員 console.log(emp.ename.length);檢查對象的屬性
檢查對象的屬性可以使用以下四種方法檢測對象中是否存在指定屬性
1.使用關(guān)鍵字in
var obj = { name : "張無忌", age : 18 } if ("age" in obj) { console.log("obj對象的age屬性存在..."); } else { console.log("obj對象的age屬性不存在...")
2.使用Object對象的hasOwnProperty()方法。
var obj = { name : "張無忌", age : 18 } if (obj.hasOwnProperty("age")) { console.log("obj對象的age屬性存在..."); } else { console.log("obj對象的age屬性不存在...") }
3.使用undefined進行判斷。
var obj = { name : "張無忌", age : 18 } if (obj.age !== undefined) { console.log("obj對象的age屬性存在..."); } else { console.log("請先定義obj對象的age屬性..."); }
4.使用if語句進行判斷
var obj = { name : "張無忌", age : 18 } if (obj.age) { console.log("obj對象的age屬性存在..."); }刪除對象的屬性
可以用delete操作符刪除一個不是繼承而來的屬性。
var obj = { name : "張無忌", sayMe : function(){ console.log("我是張無忌"); } } 1.delete 對象名.屬性名 2.delete 對象名[屬性名] delete obj.name; console.log(obj.name);// undefined對象的方法 定義對象的方法
定義方法就像定義普通的函數(shù),出了他們必須被賦予給對象的某個屬性。
var obj = { name : "張無忌", age : 18, sayMe : function(){ console.log("我是張無忌"); } } // 1.對象名.新的方法名 = function(){} obj.sayYou = function(){ console.log("你是周芷若"); } console.log(obj); // 2.對象名[新的方法名] = function(){}調(diào)用對象的方法
對象方法的調(diào)用類似于對象屬性的調(diào)用,很簡單 有兩種屬性
var obj = { name : "張無忌", age : 18, sayMe : function(){ console.log("我是張無忌"); } } // 1.對象名.方法名() obj.sayMe(); // 2.對象名[方法名]() obj["sayMe"]();刪除對象的方法
可以用delete操作符刪除對象
代碼示例;
var obj = { name : "張無忌", age : 18, sayMe : function(){ console.log("我是張無忌"); } } // 1.delete 對象名.方法名 delete obj.sayMe; // 訪問對象中不存在的方法 -> 報錯(TypeError: obj.sayMe is not a function) // obj.sayMe(); console.log(obj.sayMe);// undefined console.log(obj); // 以屬性是否存在的方式進行判斷 if ("sayMe" in obj) { // 確認(rèn)目前是一個方法 if (obj.sayMe instanceof Function) { obj.sayMe();// 方法調(diào)用 } } // 以上代碼可以優(yōu)化為以下代碼 if ("sayMe" in obj && obj.sayMe instanceof Function) { obj.sayMe();// 方法調(diào)用 } // 2.delete 對象名[方法名]
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/96915.html
摘要:創(chuàng)建對象對象直接量構(gòu)造函數(shù)原型繼承類繼承對象擁有自有屬性和繼承屬性。遍歷順序是以廣度優(yōu)先遍歷所以使用便可以判斷是否是對象自有的屬性??蓤?zhí)行對象通過如下方法可以創(chuàng)建一個可執(zhí)行對象既可以當(dāng)作對象來使用有原型鏈,也可以當(dāng)作函數(shù)來直接調(diào)用 原文: http://pij.robinqu.me/Javascript_Core/Javascript_Basics/Objects.html ...
摘要:基礎(chǔ)語法區(qū)分大小寫是一種區(qū)分大小寫的語法,意味著的關(guān)鍵字變量名函數(shù)名以及其他一切的字符表示都要使用一致的大小寫形式?;镎Z化物語空格和換行會忽略代碼中出現(xiàn)的空格換行制表符。如果不用花括號獨立獨立編寫一個語句,語法并不報錯,但不推薦。 JavaScript基礎(chǔ)語法 區(qū)分大小寫 JavaScript是一種區(qū)分大小寫的語法,意味著JavaScript的關(guān)鍵字、變量名、函數(shù)名以及其他一切的字符...
摘要:瀏覽器只是實現(xiàn)的宿主環(huán)境之一,其他宿主環(huán)境包括和。年月,版發(fā)布,成為國際標(biāo)準(zhǔn)。事件定義了事件和事件處理的接口。對于已經(jīng)正式納入標(biāo)準(zhǔn)的來說,盡管各瀏覽器都實現(xiàn)了某些眾所周知的共同特性,但其他特性還是會因瀏覽器而異。 JavaScript 是面向 Web 的編程語言,絕大多數(shù)現(xiàn)代網(wǎng)站都使用了 JavaScript,并且所有的現(xiàn)代 Web 瀏覽器(電腦,手機,平板)均包含了 JavaScri...
摘要:數(shù)組創(chuàng)建數(shù)組數(shù)組字面量使用構(gòu)造函數(shù)數(shù)組本質(zhì)上是所以要判斷是不是數(shù)組,需要通過判斷。數(shù)組長度使用屬性獲取元素的個數(shù)。例如函數(shù)的對象就是這樣 原文: http://pij.robinqu.me/JavaScript_Core/JavaScript_Basics/Array.html 源代碼: https://github.com/RobinQu/Programing-In-...
摘要:多數(shù)運算符都是由標(biāo)點符號表示,比如和。通常會根據(jù)需要對操作數(shù)進行類型轉(zhuǎn)換左值是一個古老的屬于,它是指表達(dá)式只能出現(xiàn)在賦值運算符的左側(cè)。也稱為嚴(yán)格相等運算符,它用來檢測兩個操作數(shù)是否嚴(yán)格相等。運算符的檢測規(guī)則是和運算符的求反。 源代碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/...
摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會編程,在學(xué)習(xí)和解決問題上總會碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計和編程的能力掌握基本的優(yōu)化策略。 學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會Java編程,在學(xué)習(xí)和解決問題上總會碰到障礙。工作的時間越久就越能明白這個道理。不過這倒是一個讓人進步的機會,因為你要一直不斷的學(xué)習(xí)才能很好的解決你面前的難題...
閱讀 3115·2021-10-13 09:40
閱讀 3971·2021-09-22 15:51
閱讀 1512·2021-09-22 15:48
閱讀 1081·2021-09-06 15:00
閱讀 1806·2019-08-30 15:43
閱讀 2372·2019-08-29 18:35
閱讀 1684·2019-08-29 16:18
閱讀 3630·2019-08-29 12:49