1. 程式人生 > >《Javascript 高階程式設計(第三版)》筆記0x3 JavaScript基本概念(2)

《Javascript 高階程式設計(第三版)》筆記0x3 JavaScript基本概念(2)

目錄

 

操作符

    一元操作符

    位操作符

    布林操作符

    乘性操作符

    加性操作符

    關係操作符

    相等操作符

    條件操作符

    賦值操作符

    逗號操作符


操作符

        包括算術操作符位操作符關係操作符相等操作符

    一元操作符

//遞增和遞減操作符
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