如果&&左側表示式的值為真值,則返回右側表示式的值;否則返回左側表示式的值。
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...