摘要:大括號的作用,在不同的上下文中差別很大以下觀點若有錯誤,請前輩及時指出一被當做對象字面量如,外層的被賦值給了,這里的被當做對象處理。本文參考你不知道的
大括號‘{ }’的作用,在不同的上下文中差別很大!以下觀點若有錯誤,請前輩及時指出!
一、{ }被當做對象字面量如:var obj = { foo: function(){} };,外層的{...}被賦值給了obj,這里的{...}被當做對象處理。
在{ }的前面有運算符出現時,都會被當做對象處理,如:"" + {},var a = {x:1};
在{ }的外面包裹( )時,也被當對象處理,如( {a:1} ),而( { var a = 1; } )不符合對象定義的語法,會提示語法錯誤
二、{ }被當做代碼塊除了以上被當做對象處理的情況,其它基本會被當做代碼塊處理
如:
當去掉var obj = { foo: function(){...} };中的聲明賦值部分,只留下{ foo: function(){...} };,此時,{...}表示一個代碼塊,代碼塊內的foo: function(){...}將被視為標簽語句(可以通過使用break foo;跳過被標記的代碼塊執行之后的語句,而在循環中可以用continue label;跳過被標記的循環體的本次循環,繼續下一次循環,用break label;跳出被標記的循環體)
再如:
[] + {}; //"[object Object]" {} + []; //0
第一句簡單,{}被當做空對象處理,實際計算的是"" + [object Object]
第二句中,{}前面沒有運算符,也沒有其它任何修飾,被當做空的代碼塊了,實際計算的是+[]
如:function foo() {...}
如:for(var i = 0; i < 5; i++){...}
var a = {x:1,y:2}; if(a.x == 1){ ... }else if(a.y == 2){ ... }else{ ... }
其實JavaScript并沒有else if語句,如果if、else語句后面只有單個語句時可以省略{ },所以else if(...){...}else{...},嚴格來講應該是這樣else { if(...){...}else{...} }
三、解構賦值ES6中新增的語法,如:var {a,b} = {a:1,b:2}; 相當于:
var obj = {a:1,b:2}; var a = obj.a; var b = obj.b;
解構賦值也可以用于函數命名參數中:
function foo({a,b}){ console.log(a,b); } foo( {a:1,b:2} )四、JSON對象
雖說JSON是JavaScript語言的一個子集,但是JSON本身并不是合法的JavaScript語法,如:
{ "a": 1}不符合對象定義的語法,也不符合標簽的語法(不允許有""),在各瀏覽器控制臺輸入它,表現各不相同,大部分拋出SyntaxError,Chrome則把它轉換為對象了。
此時可以通過JSON-P,JSON-P能通過將JSON數據封裝為函數調用,如foo({ "a": 1}),從而將JSON轉換為合法的JavaScript語法。
本文參考《你不知道的JavaScript》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80584.html
摘要:如果我們把非布爾值作為條件呢打開控制臺并運行上述代碼,會打印說明條件為真值。在中,真值指的是在布爾值上下文中轉換后的值為真的值。兩個能夠建立元素間一一對應的集合稱為互相對等集合。 showImg(https://segmentfault.com/img/bVbtSvt?w=720&h=360); 為了保證可讀性,本文采用音譯而非直譯。 Javascript 一直是神奇的語言。 不相信我...
摘要:中文文檔中的變量提升,是指在聲明變量的代碼執行之前,可以進行初始化和使用而不是指在創建詞法環境階段是否會創建對應的標識符。 問題背景 今天在 chrome devtools 中運行以下代碼: function fn (name){ if (typeof name === undefined){ console.log(name:, name) let name ...
摘要:彈出的就是,歲。值得注意的是,和都是改變上下文中的并立即執行這個函數,方法改變了指向之后會返回一個函數,可以隨時調用。和作用完全一樣,只是傳參的方式不一樣。以上,有錯希望各位大神斧正。 apply bind call這三個方法,作用都是改變當前使用該方法的對象的this指向。但三個方法還是有一些區別,先說說共同點。 window.person = { name: mice...
摘要:運行規則根據的運作原理,我們可以看到,的值和調用棧通過哪些函數的調用運行到調用當前函數的過程以及如何被調用有關。 1. this的誕生 假設我們有一個speak函數,通過this的運行機制,當使用不同的方法調用它時,我們可以靈活的輸出不同的name。 var me = {name: me}; function speak() { console.log(this.name); }...
摘要:一個表示編譯器檢測到一個無效的引用值。在實際情況中,往往是在獲取一個未被賦值的引用時被拋出。任何一個函數上下文都有一個被稱為活動對象的變量對象。沒有找到的話,就會認為引用名沒有基礎值并拋出的錯誤。下沒有下的屬性僅存在于被啟動的情況下。 和其他語言相比,javascript中的對于undefined的理解還是有點讓人困惑的。特別是試著理解ReferenceErrors錯誤(x is no...
閱讀 2069·2021-11-16 11:45
閱讀 569·2021-11-04 16:12
閱讀 1369·2021-10-08 10:22
閱讀 840·2021-09-23 11:52
閱讀 4128·2021-09-22 15:47
閱讀 3513·2021-09-22 15:07
閱讀 485·2021-09-03 10:28
閱讀 1730·2021-09-02 15:21