《Javascript 高階程式設計(第三版)》筆記0x3 JavaScript基本概念(2)
阿新 • • 發佈:2018-12-13
目錄
操作符
包括算術操作符、位操作符、關係操作符和相等操作符
一元操作符
//遞增和遞減操作符 var age = 29; var anotherAge = --age + 2; alert(age); // 輸出 28 alert(anotherAge); // 輸出 30 var num1 = 2; var num2 = 20; var num3 = num1-- + num2; // 等於 22 var num4 = num1 + num2; // 等於 21 //一元加和減操作符 var num = 25; num = +num; // 仍然是 25 /* 在對非數值應用一元加操作符時,該操作符會像 Number()轉型函式一樣對這個值執行轉換。 換句話說,布林值 false 和 true 將被轉換為 0 和 1,字串值會被按照一組特殊的規則進行解析,而 物件是先呼叫它們的 valueOf()和(或) toString()方法,再轉換得到的值。 */ var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1 = +s1; // 值變成數值 1 s2 = +s2; // 值變成數值 1.1 s3 = +s3; // 值變成 NaN b = +b; // 值變成數值 0 f = +f; // 值未變,仍然是 1.1 o = +o; // 值變成數值-1 var s1 = "01"; var s2 = "1.1"; var s3 = "z"; var b = false; var f = 1.1; var o = { valueOf: function() { return -1; } }; s1 = -s1; // 值變成了數值-1 s2 = -s2; // 值變成了數值-1.1 s3 = -s3; // 值變成了 NaN b = -b; // 值變成了數值 0 f = -f; // 變成了-1.1 o = -o; // 值變成了數值 1
位操作符
//按位非(NOT) var num1 = 25; // 二進位制 00000000000000000000000000011001 var num2 = ~num1; // 二進位制 11111111111111111111111111100110 alert(num2); // -26 var num1 = 25; var num2 = -num1 - 1; alert(num2); // "-26" //按位與(AND) var result = 25 & 3; alert(result); //1 /* * 25 = 0000 0000 0000 0000 0000 0000 0001 1001 * 3 = 0000 0000 0000 0000 0000 0000 0000 0011 * --------------------------------------------- * AND = 0000 0000 0000 0000 0000 0000 0000 0001 */ //按位或(OR) var result = 25 | 3; alert(result); //27 /* * 25 = 0000 0000 0000 0000 0000 0000 0001 1001 * 3 = 0000 0000 0000 0000 0000 0000 0000 0011 * -------------------------------------------- * OR = 0000 0000 0000 0000 0000 0000 0001 1011 */ //按位異或(XOR) var result = 25 ^ 3; alert(result); //26 /* * 25 = 0000 0000 0000 0000 0000 0000 0001 1001 * 3 = 0000 0000 0000 0000 0000 0000 0000 0011 * --------------------------------------------- * XOR = 0000 0000 0000 0000 0000 0000 0001 1010 */ //左移 //左移不會影響運算元的符號位。 var oldValue = 2; // 等於二進位制的 10 var newValue = oldValue << 5; // 等於二進位制的 1000000,十進位制的 64 //有符號的右移 var oldValue = 64; // 等於二進位制的 1000000 var newValue = oldValue >> 5; // 等於二進位制的 10 ,即十進位制的 2 //無符號右移 var oldValue = 64; // 等於二進位制的 1000000 var newValue = oldValue >>> 5; // 等於二進位制的 10 ,即十進位制的 2 var oldValue = -64; // 等於二進位制的 11111111111111111111111111000000 var newValue = oldValue >>> 5; // 等於十進位制的 134217726
布林操作符
//邏輯非
alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
alert(!12345); // false
//模擬Boolean()
alert(!!"blue"); //true
alert(!!0); //false
alert(!!NaN); //false
alert(!!""); //false
alert(!!12345); //true
//邏輯與(短路操作符)
var found = true;
var result = (found && someUndefinedVariable); // 這裡會發生錯誤
alert(result); // 這一行不會執行
var found = false;
var result = (found && someUndefinedVariable); // 不會發生錯誤
alert(result); // 會執行( "false"),因為found為false後直接短路,不再進行後面
//邏輯或(短路操作符)
var found = true;
var result = (found || someUndefinedVariable); // 不會發生錯誤
alert(result); // 會執行( "true")
var found = false;
var result = (found || someUndefinedVariable); // 這裡會發生錯誤
alert(result); // 這一行不會執行
//應用
var myObject = preferredObject || backupObject;
乘性操作符
//乘法
var result = 34 * 56;
//除法
var result = 66 / 11;
//如果是非零的有限數被零除,則結果是 Infinity 或-Infinity,取決於有符號運算元的符號;
// 求模
var result = 26 % 5; // 等於 1
加性操作符
//加法
var result = 1 + 2;
var result1 = 5 + 5; // 兩個數值相加
alert(result1); // 10
var result2 = 5 + "5"; // 一個數值和一個字串相加
alert(result2); // "55"
var num1 = 5;
var num2 = 10;
//var message = "The sum of 5 and 10 is " + num1 + num2;
//alert(message); // "The sum of 5 and 10 is 510"
var message = "The sum of 5 and 10 is " + (num1 + num2);
alert(message); //"The sum of 5 and 10 is 15"
//減法
var result = 2 - 1;
var result1 = 5 - true; // 4,因為 true 被轉換成了 1
var result2 = NaN - 1; // NaN
var result3 = 5 - 3; // 2
var result4 = 5 - ""; // 5,因為"" 被轉換成了 0
var result5 = 5 - "2"; // 3,因為"2"被轉換成了 2
var result6 = 5 - null; // 5,因為 null 被轉換成了 0
關係操作符
var result1 = 5 > 3; //true
var result2 = 5 < 3; //false
var result = "Brick" < "alphabet"; //true,按字元碼比,大寫在前
var result = "Brick".toLowerCase() < "alphabet".toLowerCase(); //false
var result = "23" < "3"; //true '2'的字元碼50小於'3'的字元碼50
var result = "23" < 3; //false
var result = "a" < 3; // false,因為"a"被轉換成了 NaN
相等操作符
//相等和不相等
/*
* null == undefined true true == 1 true
* "NaN" == NaN false true == 2 false
* 5 == NaN false undefined == 0 false
* NaN == NaN false null == 0 false
* NaN != NaN true "5"==5 true
* false == 0 true
*/
//全等和不全等(比較之前不轉換運算元)
var result1 = ("55" == 55); //true,因為轉換後相等
var result2 = ("55" === 55); //false,因為不同的資料型別不相等
var result1 = ("55" != 55); //false,因為轉換後相等
var result2 = ("55" !== 55); //true,因為不同的資料型別不相等
/*
* null == undefined 會返回 true,因為它們是類似的值
* null === undefined 會返回 false,因為它們是不同型別的值
*/
條件操作符
variable = boolean_expression ? true_value : false_value;
var max = (num1 > num2) ? num1 : num2;
賦值操作符
簡化賦值操作。使用它們不會帶來任何效能的提升。
var num = 10;
num += 10;//等價於num = num + 10;
逗號操作符
var num1=1, num2=2, num3=3;
var num = (5, 1, 4, 8, 0); // num 的值為 0