細說JavaScript對象(1):對象的使用和屬性

JavaScript 中的一切都可以視為對象,除了兩個特例:null 和 undefined。

false.toString(); // 'false'
[1, 2, 3].toString(); // '1,2,3'function Foo(){}
Foo.bar = 1;
Foo.bar; // 1

一個經常容易被誤解的就是數字常量不能視為對象,實際上數字常量仍然可以視為對象。這是因為 JavaScript 解析器在解析點操作符時而將其視為浮點數特征而犯下的錯誤。

2.toString(); // raises SyntaxError

實際上,我們有很多方法可以使得數字常量表現為一個對象。

2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first

?

對象作為數據類型

JavaScript 中的對象可以當做哈希表使用,它們主要包含鍵與值的對應關系。
使用 {} 符號來創建一個簡單的對象,這個新建的對象將從 Object.prototype 繼承而來,并且不包含自己定義的屬性。

var foo = {}; // a new empty object// a new object with a 'test' property with value 12
var bar = {test: 12}; 

?

訪問對象的屬性

我們可以使用兩種方式來訪問 JavaScript 的對象,分別是點操作符 . 和中括號操作符 [] 。

var foo = {name: 'kitten'}
foo.name; // kitten
foo['name']; // kittenvar get = 'name';
foo[get]; // kittenfoo.1234; // SyntaxError
foo['1234']; // works

兩種操作符的效果幾乎一樣,唯一的不同是中括號操作符允許動態設置屬性而且屬性名可能有語法錯誤。(上例中的第三個情形已說明)

?

刪除對象的屬性

刪除屬性的唯一方法是使用 delete,將屬性值設置為 undefined 或 null 只是移除了與屬性相關的值,并沒有真正刪除屬性本身。

var obj = {bar : 1,foo : 2,baz : 3
};
obj.bar = undefined;
obj.foo = null;
delete obj.baz;for (var i in obj) {if (obj.hasOwnProperty(i)) {console.log(i, '' + obj[i]);}
}

上面的輸出 bar undefined 和 foo null,只有 baz 真正被刪除。

這里要說明一點,delete 只能刪除屬性,并不能刪除變量。所以我們在定義變量時一定要養成寫 var 的好習慣,任何時候,變量一定要使用 var 關鍵字才能聲明。因為如果不寫 var,變量會被誤認給全局對象創建了一個新屬性。

這個例子相當清楚給出了答案,a 為變量,而 b 只是一個全局對象的屬性而已。

?

命名對象的屬性

var test = {'case' : 'I am a keyword, so I must be notated as a string',delete  : 'I am a keyword, so me too' // raises SyntaxError
};

對象的屬性可以用普通字符或字符串來命名。同樣也是由于 JavaScript 解析器的一個錯誤設計,上例中的第二種表示方法在 ECMAScript 5 中將會拋出一個錯誤。

錯誤的原因是因為 delete 是一個關鍵詞,所以必須使用一個字符串常量來命名來適應老版的 JavaScript 解析器。

?

?

參考:

http://segmentfault.com/blog/stephenlee/1190000000477429

http://bonsaiden.github.io/JavaScript-Garden/#object.general

?

?

延伸閱讀:

細說JavaScript對象(1):對象的使用和屬性

細說JavaScript對象(2):原型對象

細說JavaScript對象(3):hasOwnProperty

細說JavaScript對象(4): for in 循環

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

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

相關文章

學習筆記:InnoDB存儲結構及多版本實現

因為InnoDB是多版本化的數據庫存儲引擎, 它必須在表空間中保存關于舊版本數據行的信息。這個信息被存在名為rollback segment(類似于Oracle中的回滾段)的數據結構中。 在內部,InnoDB給數據庫中的每一行添加三個域。一個是6字節的DB_TRX_ID域&…

access2003的使用

access2003中如何用sql語句創建表 http://zhidao.baidu.com/link?urldinVbwoI20Xz__NbcIeBPdkjeXRWmZNB0xJvdr0eMBqNflv_JcWgUoPw3ozFfqnTQ9FLkNv0XXs9loDR2Oc7Oq SQL 數據定義查詢創建表: 第一張表(藏書) CREATE TABLE 藏書 (書號 Text(10)…

再見安卓 鴻蒙,安卓系統:鴻蒙系統,正式再見

原標題:安卓系統:鴻蒙系統,正式再見華為手機不能使用谷歌GMS服務已經差不多一年時間,據悉華為明年最新旗艦P40系列仍然不能使用GMS,最近爆料大神數碼閑聊站稱谷歌將不給華為手機授權Android R(安卓11系統),…

Android 隱式意圖的配置

本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,轉載請注明源地址。 《Android 顯示意圖激活另外一個Actitity》一文介紹了一種激活Activity的方法 本文通過清單文件(AndroidManifest.xml)來實現意圖的配置 Intent-fil…

fpga中wire和reg的區別

wire表示直通,即只要輸入有變化,輸出馬上無條件地反映;reg表示一定要有觸發,輸出才會反映輸入。wire表示直通,即只要輸入有變化,輸出馬上無條件地反映;reg表示一定要有觸發,輸出才會…

Django Tips

新加admin.py需重啟自帶Web服務器才能顯示Admin保存設置外鍵的默認值http://stackoverflow.com/questions/937954/how-do-you-specify-a-default-for-a-django-foreignkey-model-or-adminmodel-fieldhttp://stackoverflow.com/questions/5632848/django-default-value-for-user…

wordpress html音樂,WordPress引用百度Ting音樂方法

對于個人博客來說,要在文章中添加音樂,如果放在自己服務器上,一方面是成本問題,其次,大部分博主用的國外服務器,而國外對版權看得比較重,基本上不允許上傳音樂,所以我們通常都是通過…

開發工具MyEclipse如何支持可視化設計HTML和JSP頁面

轉自:http://tigerben.iteye.com/blog/722128 這兩天一直在設計和開發JSP頁面,所有標簽都得通過自己手工編輯深感厭煩,印象中以前是有看到過MyEclipse是支持拖放HTML常用控件的,所以為此百度了一把,終有所獲。 MyEclip…

轉:c# Linq 的分頁[轉]

轉:http://www.cnblogs.com/leleroyn/archive/2008/05/14/1196811.html 很多學習Linq的朋友肯定有自己所不同的方法,考慮這個問題我所想到的是 用Take(),Skip(),TakeWhile(),SkipUntil()中的方法來實現 首先看Take()是否可用 Take方法的作用是從結果中取…

html edge瀏覽器 圖片,瀏覽器時序圖及 Microsoft Edge 構架

本文又是我的作業,完成思路借鑒了 版權說明。作業要求針對一款典型瀏覽器,繪制瀏覽器處理時序圖對用戶界面進行操作(如拖拽窗口)帶有 JavaScript 腳本 HTML 文檔查閱資料,繪制 Edge 瀏覽器的參考架構瀏覽器時序圖對用戶界面進行操作(如拖拽窗…

您需要了解的跨阻放大器——第1部分

跨阻放大器(TIA)是光學傳感器(如光電二極管)的前端放大器,用于將傳感器的輸出電流轉換為電壓。跨阻放大器的概念很簡單,即運算放大器(op amp)兩端的反饋電阻(RF&#xff…

Objective-C組合模式(Composite)

什么是組合模式? 官方:將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使用戶使用單獨對象和組合對象具有一致性。 個人理解:組合模式就相當于一個大家族,每個人都是家族中的一部分,整個家族就…

WP7應用開發筆記(3) 界面設計

界面設計 回顧一下按鈕清單: 播放控制播放/暫停Space 停止F4 快進Right 快退Left 快進X2ControlRight 快退X2ControlLeft 快進X3AltRight 快退X3AltLeft音量放大Up 縮小Down 靜音M節目下一個PageDown 上一個PageUp基本上就是把這些按鈕布置到480*800的屏幕上。 快進…

html手機顯示評論列表頁面,請問如何完美顯示評論列表頭像

目前具體思路是通過輪詢構建頭像,條件是通過判斷評論區條目length。問題是有時依然無法顯示評論區頭像。以下是目前的代碼:function showAvatar() {$(.feedbackItem).each(function() {let avatar $(this).children(.feedbackCon).children(span:last).…

幾何畫板中可以這樣選擇對象

在使用幾何畫板過程中,一些用戶朋友發現幾何畫板雖然是在Windows平臺上運行的軟件,但它選擇對象的選擇方式常常與一般的Windows繪圖軟件是有一些差別的,下面將通過詳細的講解,讓大家對幾何畫板選擇對象方法有比較系統全面的了解。…

2012 不宜進入的三個技術點(下)

賴勇浩(http://laiyonghao.com)CC 在 2011 年其實風頭甚勁,C2011 標準出臺,gcc/msvc/clang 都很快速地支持了許多新特性,新興的移動設備的性能較差,更是 C 的新舞臺,在這個時候唱衰 C&#xff0…

菜鳥做HTML5小游戲 - 刮刮樂

繼上篇翻翻樂之后,又來刮刮樂。還是先上效果圖: 開始demo的世界: 1.css去繪制界面效果。(源碼提供) 2.原理:要實現刮刮卡內容的出現,我用div做了背景層去顯示刮出的內容結果【重點】。中間Canva…

1 計算機主機里面都有些什么東西,計算機主機和外設分別包括那些東西?

___耐撕Nice___的回答:1、主機是指計算機除去輸入輸出設備以外的主要機體部分。也是用于放置主板及其他主要部件的控制箱體(容器Mainframe)。通常包括 CPU、內存、主板、光驅、電源、以及其他輸入輸出控制器和接口。在網絡技術中是關于發送與接收信息的終端設備。2、…

AppDynamics趙宇辰:硅谷APM獨角獸,打造DevOps領域的智能大腦

近來,關于機器學習的報道很多,國內外的大型互聯網企業都在著手對機器學習的研究。對應用性能的高效管理,首先要了解應用的一手數據,通過傳統的數據獲取方式已經不能滿足企業的發展和市場環境,這就需要借助機器學習的技…

江蘇有保障的計算機應用技術,2022年江蘇單招計算機應用技術專業公辦學校名單...

2021年高職單招升學一對一咨詢蒲善婷:18983252108(微信)很多考生都存在一個疑問,到底該選擇什么樣的單招學校和專業?其實啊,我們在選擇時首先要了解學校的辦學情況和招生專業,看看有沒有是不是符合自己的選擇條件,是否…