js 「 」 「 」的靈活運用

2021-06-28 02:54:22 字數 2822 閱讀 9880

如果&&左側表示式的值為真值,則返回右側表示式的值;否則返回左側表示式的值。

js**  

var i=""&&"真值";//->i=""

i="真值"&&"其他真值";//->i="其他真值"

i="真值"&&"";//->i=""

如果||左側表示式的值為真值,則返回左側表示式的值;否則返回右側表示式的值。

js**  

var i=""||"真值";//->i="真值"

i="真值"||"其他真值";//->i="真值"

i="真值"||"";//->i="真值"

一、一些晦澀的操作符:

1、(function(){})();

幾乎所有的開源js**開篇都是這樣(function(……))(……);

下面是jquery的部分原始碼:

js**  

(function( window, undefined ) ,  

// map over jquery in case of overwrite

_jquery = window.jquery,  

// map over the $ in case of overwrite

_$ = window.$,  

……  

indexof = array.prototype.indexof;  

// expose jquery to the global object

window.jquery = window.$ = jquery;  

})(window);  

那麼這個操作符(function(){})();到底是什麼意思呢?

(function(){})中的定義了乙個function,緊接著的()表示立即執行這個function。

我們看到jquery原始碼第乙個()中是定義了乙個匿名function( window, undefined ) {};接著末尾有個(window),就表示執行這個匿名function,並傳入引數window。

在匿名function( window, undefined ) {}中,定義了乙個區域性變數jquery;然後在末尾我們看到jquery末尾有一句 window.jquery = window.$ = jquery; 這句**就表示,將此前定義的jquery匯出到window物件。這也是為什麼我們可以在**任何地方直接使用$、jquery物件,因為在這裡已經將$、jquery物件掛載到window下去了,而window.$、window.jquery與直接使用$、jquery是沒有區別的。

(注意,這個window物件是傳入的引數window,而不是瀏覽器window物件!!乙個形參、乙個實參。我們可以在定義function的時候,將引數window取名為其他字元。所以我們看到jquery.min.js中這個匿名function變成了(function(e,b){})(window);)

通常(function(){})()用來封裝一些私有成員或者公共成員的匯出。

2、令人迷惑的","

我們知道「,」一般用於一次定義多個變數、定義多個引數等。像上面的jquery原始碼中在var jquery後面,使用「,」一次定義了很多個變數。

但是,像下面的**,可能大家就不一定看得懂了:

js**  

//html:

jquery(document).ready(function() ;  

alert(showname());  

});  

//結果:彈出king

這裡的「nameinput.show(),value=nameinput.val()」中的「,」運算子的作用是返回","右側表示式的值。所以,return 後面如果有多個表示式,且表示式之間由","隔開,整個return表示式返回的是最後乙個","右側的表示式的值。

「,」在開源**中常常被用於return表示式中,以及跟下面我們要講到的"()"運算子一起使用。

3、「()」廣義上的**包裝

我們遇到複雜的邏輯表示式時,我們通常會把需要一起運算的表示式用「()」包起來:(a||b)&&(c||d)

其實,我們可以這樣理解:"()"運算子將乙個表示式包裹起來作為乙個整體進行運算,然後返回這個整體的值。

那麼上面的(function(){})()中左側定義function的()也是這個作用,將這個function給包裹起來,然後返回這個function。我們呼叫方法一般是a();那麼(function(){})的作用就是返回這個function物件,然後(function(){})()右側的()表示呼叫這個function。

我們再來看其他的用法:

js**  

//html:輸入錯誤!

jquery(document).ready(function() ;  

alert(namevalidate());  

});  

//結果 nameerrortip顯示,彈出"請輸入king!"

//html:輸入錯誤!

//結果 nameerrortip隱藏,彈出"對了,輸入為king!"

這裡「 (value=nameinput.val(),value=="king")」中"()"將裡面的表示式作為乙個整體進行運算,而裡面的表示式又是由","構成的多個表示式組,所以執行的時候會把這多個表示式都執行一次,並且返回最後乙個表示式的值!

所以 (value=nameinput.val(),value=="king")執行時,先運算value的值,再判斷是否為"king"。如果為king,會執行(nameerrortip.hide(),"對了,輸入為king!")。這個表示式又先將nameerrortip隱藏,再返回乙個"對了,輸入為king!"字串作為 整個return的值。

靈活運用PHP stdClass

轉 一維陣列,我現在特別喜歡把它寫成物件,因為鍵盤打起來比較順手,看起來也順眼,如 andy array andy a 1 andy b 2 andy c 3 我喜歡把它變成這樣 andy array andy object andy andy a 1 andy b 2 andy c 3 新建空陣列...

Webform Repeater的靈活運用

案例 模擬購物列表 封裝實體類 view code 資料訪問類 view code 用repeater展示 1 2 3 4 5 685 86105 106 1 using system 2 using system.collections.generic 3 using system.linq 4 ...

靈活運用建構函式

示例 public class activityutils 得到activityutils的物件 public static activityutils getinstance return instance 管理activity的棧 public void add activity activit...