JavaScript 高級程序設(shè)計學習筆記2—— 基本概念(語法、變量刚盈、數(shù)據(jù)類型墨微、操作符)

第3章 基本概念

3.1 語法

ECMAScript 的語法大量借鑒了C 及其他類 C 語言(Java / Perl)的語法。

3.1.1 區(qū)分大小寫

ECMAScript 中的一切(變量扁掸、函數(shù)名翘县、操作符)都區(qū)分大小寫。

3.1.2 標識符

標識符——變量谴分、函數(shù)锈麸、屬性的名字,或函數(shù)的參數(shù)牺蹄。標識符可以是按下列各式規(guī)則組合起來的一個或多個字符:
1)第一個字符必須是字母忘伞、下劃線或美元符號;
2)其他字符可以是字母、下劃線氓奈、美元符號或數(shù)字翘魄。
注:
1)標識符中字母可包含擴展的 ASCII 或 Unicode 字母字符,但不推薦這樣做舀奶。
2)駝峰大小寫格式:第一個字母小寫暑竟,剩下的每個單詞首字母大寫。 firstSecond
3)關(guān)鍵字育勺、保留字但荤、true、false涧至、null不可用作標識符腹躁。

3.1.3 注釋

單行注釋://單行注釋
塊級注釋:
/*
*這是一個多行(這兩行的星號不是必須的,純粹為了提高注釋的可讀性南蓬,企業(yè)級應(yīng)用中用的較多)
*(塊級)注釋 (這兩行的星號不是必須的纺非,純粹為了提高注釋的可讀性,企業(yè)級應(yīng)用中用的較多)
*/

3.1.4 嚴格模式

嚴格模式為 JavaScript 定義了一種不同的解析和執(zhí)行模式赘方。
要啟用嚴格模式铐炫,可以在頂部添加如下代碼:
‘use strict’—— 編譯指示,用于告訴支持的 JavaScript 引擎切換到嚴格模式蒜焊。
可以在函數(shù)內(nèi)部上方包含這條編譯指示倒信,也可以制定函數(shù)在嚴格模式下執(zhí)行。
嚴格模式下泳梆,JavaScript 的執(zhí)行結(jié)果會有很大不同鳖悠。

3.1.5 語句

ECMAScript 中的語句以一個分號結(jié)尾;若省略分號优妙,由解析器確定語句的結(jié)尾(不推薦)乘综,代碼行結(jié)尾處無分號會導致壓縮錯誤。且加上分號套硼,則解析器不必花時間推測應(yīng)該在哪里插入分號卡辰、增進代碼性能。

3.2 關(guān)鍵字和保留字

關(guān)鍵字——用于表示控制語句的開始或結(jié)束邪意,或用于執(zhí)行特定操作等九妈。

break    do    instanceof    typeof    case    else    new    var    catch    finally   
return    void    continue    for    switch    while    debugger*    fuction    this    
with    default    if    throw    delete    in    try

保留字——無特定用途,但將來可能被用作關(guān)鍵字雾鬼。

avstract    enum    int    short    boolean    export    interface    static    byte  
extends    long    super    char    final    native    synchronized    class    float    
package    throws    const    goto    private    transient    debugger    
implements    protected    volatile    double    import    public

第 5 版 非嚴格模式下運行時的保留字縮減為下列這些:
class enum extends super const export import
嚴格模式下萌朱,第5版還對以下保留字施加了限制:
implements package public interface private static let protected yield

3.3 變量

ECMAScript 的變量是松散類型的——可以用來保存任何類型的數(shù)據(jù),即每個變量僅僅是一個用于保存值得占位符而已策菜。
如:var message = 'hi'; 變量 message 中保存了一個字符串 hi 晶疼,但并不會把它標記為字符串類型酒贬。
message = 100;則 message 保存了 一個數(shù)值翠霍,雖然我們不建議修改變量所保存值得類型锭吨,但這種操作在 ECMAScript 中完全有效。
在函數(shù)內(nèi)用 var 定義一個變量寒匙,則該變量為定義該變量的作用域中的局部變量零如,函數(shù)推出后則銷毀。
省略 var 蒋情,則為全局變量埠况,在函數(shù)外的任何地方都可被訪問到(不推薦耸携,難維護棵癣,且在嚴格模式下會拋出錯誤)。
注:
ES6 中增加了 let 和 const 夺衍,let 用來定義變量狈谊,定義后可更改;const 用來定義常量沟沙,定義后不可更改河劝。
let 和 var 的區(qū)別。
1)let 是塊級作用域矛紫,var 是函數(shù)級作用域赎瞎,let 的作用域更小颊咬;
2)let 無變量提升务甥。下面定義的變量,在上面使用會報錯喳篇;var有變量提升敞临,下面定義的變量,在上面值為undefined麸澜。
3)let 同一個變量只能聲明一次挺尿,而 var 可聲明多次。
一條語句定義多個變量:

var   message = 'hi',
        found = false,
        age = 29;

注:嚴格模式下炊邦,不能定義名為 eval 或 arguments 的變量编矾,否則會導致語法錯誤。

3.4 數(shù)據(jù)類型

簡單數(shù)據(jù)類型(基本數(shù)據(jù)類型): Undefined ; Null ; Boolean ; Number ; String
復雜數(shù)據(jù)類型:Object馁害,Object 本質(zhì)上是由一組無序的名值對組成洽沟。

3.4.1 typeof 操作符

typeof——返回給定變量的數(shù)據(jù)類型,可能返回如下字符串:

'undefined'——Undefined
'boolean'——Boolean
'string'——String
'number'——Number
'object'——Object / Null (Null 為空對象的引用)
'function'——Function

typeof 是操作符而非函數(shù)蜗细,所以可以使用圓括號裆操,也可以不使用怒详。

var message = ’some string‘;
alert(typeof message)踪区; /     alert(typeof (message))昆烁;

注:對聲明未初始化的變量和未聲明的變量執(zhí)行typeof操作符,都會返回 undefined缎岗。

各數(shù)據(jù)類型及描述
  • Undefined:undefined

使用var聲明變量但未初始化静尼;或初始化其值為undefined(不必要,一般不用)
(var message)传泊;alert(message)鼠渺;//undefined

  • Null:null

空對象指針,用于在將來保存對象眷细。這樣只要檢查變量是否等于null拦盹,就知道這個變量內(nèi)是否已經(jīng)保存了一個對象的引用。

alert(null == undefined)溪椎; //true
alert(null === undefined)普舆; //false
  • Boolean:true / false

ECMAScript 中所有類型的值都有與這兩個Boolean 值等價的值;可使用轉(zhuǎn)型函數(shù)Boolean()進行轉(zhuǎn)換校读。
非空字符串沼侣、非零數(shù)值瓷产、任何對象都是 true诅挑;
空字符串入挣、數(shù)值零或NaN摔刁、null都是false齿尽。
流控制語句(如if)會自動執(zhí)行 Boolean 轉(zhuǎn)換肥照。

var message = 'hello';
if(message){alert('value is true');}  //message被自動轉(zhuǎn)換為對應(yīng)的 Boolean 值(true)均蜜。
  • Number

1)定義
var intNum = 55但绕; //整數(shù)
八進制:第一位為0却特,后面數(shù)值若超出范圍扶供,則前導零被忽略,將后面數(shù)值按十進制解析
var intNum = 070; //八進制的56
var intNum = 079; //無效的八進制數(shù)值裂明,解析為79
十六進制:前兩位為0x椿浓,后跟十六進制數(shù)字。
var initNum = 0xa; //十六進制的10
var initNum = 0x1f闽晦; //十六進制的31
2)浮點數(shù)值:
必須包含一個小數(shù)點扳碍,且小數(shù)點后必須至少有一位數(shù)字。
保存浮點數(shù)需要的內(nèi)存空間是保存整數(shù)值的兩倍仙蛉,所以ECMAScript會不失時機地將浮點數(shù)轉(zhuǎn)換為整數(shù)笋敞。若小數(shù)點后沒有數(shù)字(1.)或數(shù)字為0(10.0),則將被作為整數(shù)來保存荠瘪。
浮點數(shù)最高精度是17位小數(shù)夯巷,但計算時其精度遠不如整數(shù)赛惩。如 0.1 + 0.2 不是 0.3,而是0.3000000000000004.因此趁餐,永遠不要測試某個特定的浮點數(shù)值喷兼。
3)數(shù)值范圍
由于內(nèi)存限制,ECMAScript并不能保存世界上所有數(shù)值后雷。
Number.MIN_VALUE(5e-324) < number < Number.Max_VALUE(1.7976931348623157e+308)
大于這個范圍季惯,會被轉(zhuǎn)換為 Infinity(正無窮),小于這個范圍臀突,會被轉(zhuǎn)換為 -Infinity(負無窮)勉抓。
isFinity()可以返回這個數(shù)是否在范圍內(nèi),在則返回 true候学,否則返回 false藕筋。
4)NaN
非數(shù)值——特殊的數(shù)值,本該返回數(shù)值的操作數(shù)未返回數(shù)值的情況盒齿,不拋出錯誤念逞。
任何涉及 NAN 的操作都會返回 NaN 困食,NaN 與任何值都不相等边翁。 alert(NaN == NaN ); //false
isNaN(),函數(shù)收到一個值后硕盹,會嘗試將這個值轉(zhuǎn)換為數(shù)值符匾,可以轉(zhuǎn)換則返回 false,否則返回 true瘩例。
alert(isNaN(true))啊胶; 返回 false,因為 true 可以被轉(zhuǎn)換為1垛贤。
5)數(shù)值轉(zhuǎn)換
Number()——用于任何類型焰坪;parseInt()、parseFolat()——專用于把字符串轉(zhuǎn)換為數(shù)值聘惦。

Number()
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //11
var num4 = Number(true); //1
parseInt()
var num1 = parseInt("1234blue"); // 1234
var num2 = parseInt(""); // NaN
var num4 = parseInt(22.5); // 22
var num6 = parseInt("70"); // 70
var num8 = parseInt("s2131"); // NaN
var num = parseInt("0xAF", 16); //175
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
指定基數(shù)轉(zhuǎn)換:
var num1 = parseInt("10", 2); //2 (按二進制解析)
var num2 = parseInt("10", 8); //8 (按八進制解析)
var num3 = parseInt("10", 10); //10 (按十進制解析)
var num4 = parseInt("10", 16); //16 (按十六進制解析)
parseFloat()
從第一個字符開始解析某饰,始終忽略前導零
var num1 = parseFloat("1234blue"); //1234 (整數(shù))
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000
  • String

String 類型用于表示由零或多個16 位Unicode 字符組成的字符序列,即字符串善绎。字符串可以由雙
引號(")或單引號(')表示黔漂,但前后符號應(yīng)保持一致。

var firstName = "Nicholas";
var lastName = 'Zakas';

1)特殊的字符字面量(轉(zhuǎn)義序列)禀酱,用于表示非打印字符或具有其他用途的字符炬守。一個轉(zhuǎn)義序列表示一個字符。
任何字符串的長度都可以通過 length 屬性取得剂跟。

2)字符串的特點
ECMAScript 中的字符串是不可變的减途,也就是說酣藻,字符串一旦創(chuàng)建,它們的值就不能改變鳍置。要改變某個變量保存的字符串臊恋,首先要銷毀原來的字符串,然后再用另一個包含新值的字符串填充該變量

3)轉(zhuǎn)換為字符串 toString()
數(shù)值墓捻、布爾值抖仅、對象和字符串都有一個 toString() 方法,返回一個字符串砖第。null 和 undefined 沒有 toString() 方法撤卢。
數(shù)值的 toString() 方法可以傳一個參數(shù):輸出數(shù)值的基數(shù)。

var num = 10;
alert(num.toString()); // "10"  不傳梧兼,默認為10
alert(num.toString(2)); // "1010"
alert(num.toString(8)); // "12"
alert(num.toString(10)); // "10"
alert(num.toString(16)); // "a"

在不知道要轉(zhuǎn)換的值是不是 null 或 undefined 時放吩,可以使用轉(zhuǎn)型函數(shù) String(),這個函數(shù)可以將任何類型的值轉(zhuǎn)換為字符串羽杰。String()遵循下列轉(zhuǎn)換規(guī)則:
如果值有toString()方法渡紫,則調(diào)用該方法(沒有參數(shù))并返回相應(yīng)的結(jié)果;
如果值是null考赛,則返回"null"惕澎;
如果值是undefined,則返回"undefined"颜骤。

  • Object

ECMAScript 中的對象其實就是一組數(shù)據(jù)和功能的集合唧喉。對象可以通過執(zhí)行new 操作符后跟要創(chuàng)建
的對象類型的名稱來創(chuàng)建。
如:var o = new Object();若不傳參數(shù)忍抽,圓括號可省八孝,但不推薦這樣做。
僅僅創(chuàng)建Object 的實例并沒有什么用處鸠项,但關(guān)鍵是要理解一個重要的思想:即在ECMAScript 中干跛,
Object 類型是所有它的實例的基礎(chǔ)。換句話說祟绊,
Object 類型所具有的任何屬性和方法也同樣存在于更具體的對象中楼入。
Object 的每個實例都具有下列屬性和方法。
constructor:保存著用于創(chuàng)建當前對象的函數(shù)久免。對于前面的例子而言浅辙,構(gòu)造函數(shù)(constructor)
就是Object()。
hasOwnProperty(propertyName):用于檢查給定的屬性在當前對象實例中(而不是在實例的原型中)是否存在阎姥。其中记舆,作為參數(shù)的屬性名(propertyName)必須以字符串形式指定(例如:o.hasOwnProperty("name"))。
isPrototypeOf(object):用于檢查傳入的對象是否是傳入對象的原型
propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in 語句來枚舉呼巴。與hasOwnProperty()方法一樣泽腮,作為參數(shù)的屬性名必須以字符串形式指定御蒲。
toLocaleString():返回對象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng)诊赊。
toString():返回對象的字符串表示厚满。
valueOf():返回對象的字符串、數(shù)值或布爾值表示碧磅。通常與toString()方法的返回值相同碘箍。
由于在ECMAScript 中Object 是所有對象的基礎(chǔ),因此所有對象都具有這些基本的屬性和方法鲸郊。

3.5 操作符

操作符丰榴,包括算數(shù)操作符、位操作符秆撮、關(guān)系操作符和相等操作符四濒。
操作符適用于很多值:字符串、數(shù)值职辨、布爾值盗蟆、對象。應(yīng)用于對象時舒裤,相應(yīng)的操作符通常都會調(diào)用對象的 valueOf() 或 toString() 方法喳资,以便取得可以操作的值。

3.5.1 一元操作符——只能操作一個值
1.遞增遞減操作符——可用于數(shù)值惭每、字符串骨饿、布爾值亏栈、對象台腥。

前置:先改變變量的值,在求語句的值

前置遞增: var age = 29绒北;var age2 = 2黎侈;var result =  ++age + age2;(同 age = age +1闷游;) 
//age 為30 result 為32

前置遞減: var age = 29峻汉;var age2 = 2;var result =  --age+ age2脐往;(同 age = age -1休吠;)   
 //age 為28 result 為30

后置;先求語句的值业簿,再改變變量的值
后置遞增: var age = 29瘤礁;var age2 = 2;var result =  age++ + age2梅尤;(同 age = age +1柜思;) 
//age 為30  result 為31

后置遞減: var age = 29岩调;var age2 = 2;var result =  age-- + age2赡盘;(同 age = age -1号枕;)   
 //age 為28 result 為31

應(yīng)用規(guī)則:
1)應(yīng)用于數(shù)值時,直接執(zhí)行加減操作陨享。
2)應(yīng)用于字符串葱淳,若包含有效數(shù)字字符,則轉(zhuǎn)換為數(shù)字值抛姑,再執(zhí)行操作蛙紫,字符串變量變成數(shù)值變量;若不包含有效數(shù)字字符途戒,則變量的值設(shè)為 NaN 坑傅,字符串變量變成數(shù)值變量。
3)應(yīng)用于布爾值時喷斋,若是 false唁毒,則先轉(zhuǎn)換為 0 再執(zhí)行;若是 true星爪,則先轉(zhuǎn)換為 1 再執(zhí)行浆西;最終都將布爾值變量變?yōu)閿?shù)值變量。
4)應(yīng)用于對象時顽腾,先調(diào)用 valueOf() 方法近零,取得一個可供操作的值,再對其應(yīng)用上述規(guī)則抄肖。若結(jié)果是 NaN久信,則調(diào)用 toString()方法后再應(yīng)用上述規(guī)則。對象變量變成數(shù)值變量漓摩。

var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
valueOf: function() {
return -1;
    }
};
s1++; // 值變成數(shù)值3
s2++; // 值變成NaN
b++; // 值變成數(shù)值1
f--; // 值變成0.10000000000000009(由于浮點舍入錯誤所致)
o--; // 值變成數(shù)值-2
2.一元加減操作符

1)一元加操作符
數(shù)值前添加一元加操作符裙士,無作用;
其他類型前添加一元加操作符管毙,會像 Number() 函數(shù)一樣對這個值進行轉(zhuǎn)換腿椎。
2)一元減操作符
數(shù)值前添加一元減操作符,轉(zhuǎn)換為對應(yīng)負數(shù)夭咬;
其他類型前添加一元減操作符啃炸,同樣,會像 Number() 函數(shù)一樣對這個值進行轉(zhuǎn)換卓舵,再將得到的值轉(zhuǎn)換為負數(shù).

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; // 值變成了數(shù)值-1
s2 = -s2; // 值變成了數(shù)值-1.1
s3 = -s3; // 值變成了NaN
b = -b; // 值變成了數(shù)值0
f = -f; // 變成了-1.1
o = -o; // 值變成了數(shù)值1
3.5.2 位操作符 略
3.5.3 布爾操作符——與南用、或、非
1.邏輯非 —— !

空字符串训枢、數(shù)值0托修、null、undefined恒界、null睦刃、NaN 的布爾值為 false,則對他們執(zhí)行邏輯非操作十酣,返回 true涩拙。

alert(!false); // true
alert(!"blue"); // false
alert(!0); // true
alert(!NaN); // true
alert(!""); // true
aler t(!12345); // false
2.邏輯與 —— && 有兩個操作數(shù)

真值表如下:



邏輯與操作可以應(yīng)用于任何類型的操作數(shù),而不僅僅是布爾值耸采。在有一個操作數(shù)不是布爾值的情況下兴泥,邏輯與操作就不一定返回布爾值;此時虾宇,它遵循下列規(guī)則:
如果第一個操作數(shù)的布爾值是 true搓彻,則返回第二個操作數(shù);
如果有一個操作數(shù)是null嘱朽,則返回null旭贬;
如果有一個操作數(shù)是NaN,則返回NaN搪泳;
如果有一個操作數(shù)是undefined稀轨,則返回undefined。
邏輯與操作符是短路操作符岸军,如果第一個操作數(shù)為 false奋刽,則結(jié)果都為 false,第二個操作數(shù)不執(zhí)行艰赞。

3.邏輯或 —— || 有兩個操作數(shù)

真值表如下:



與邏輯與操作相似佣谐,如果有一個操作數(shù)不是布爾值,邏輯或也不一定返回布爾值猖毫;此時台谍,它遵循下列規(guī)則:
如果第一個操作數(shù)的求值結(jié)果為 true,則返回第一個操作數(shù)吁断;
如果第一個操作數(shù)的求值結(jié)果為 false,則返回第二個操作數(shù)坞生;
如果兩個操作數(shù)都是null仔役,則返回null;
如果兩個操作數(shù)都是NaN是己,則返回NaN又兵;
如果兩個操作數(shù)都是undefined,則返回undefined。
邏輯或操作符也是短路操作符沛厨,如果第一個操作數(shù)為 true宙地,則結(jié)果都為 true,第二個操作數(shù)不執(zhí)行逆皮。

3.5.4 乘性操作符

乘法宅粥、除法、求模
如果參與乘性操作符的某個操作數(shù)不是數(shù)值电谣,后臺會先使用 Number() 轉(zhuǎn)型函數(shù)將其轉(zhuǎn)換為數(shù)值秽梅。

1.乘法 *

特殊值處理規(guī)則:
? 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的乘法計算剿牺,即兩個正數(shù)或兩個負數(shù)相乘的結(jié)果還是正數(shù)企垦,而 如果只有一個操作數(shù)有符號,那么結(jié)果就是負數(shù)晒来。如果乘積超過了 ECMAScript數(shù)值的表示范圍钞诡, 則返回 Infinity 或-Infinity;
? 如果有一個操作數(shù)是 NaN湃崩,則結(jié)果是 NaN臭增;
? 如果是 Infinity 與 0相乘,則結(jié)果是 NaN竹习;
? 如果是 Infinity 與非 0數(shù)值相乘誊抛,則結(jié)果是 Infinity 或-Infinity,取決于有符號操作數(shù) 的符號整陌;
? 如果是 Infinity 與 Infinity 相乘拗窃,則結(jié)果是 Infinity;
? 如果有一個操作數(shù)不是數(shù)值泌辫,則在后臺調(diào)用 Number()將其轉(zhuǎn)換為數(shù)值随夸,然后再應(yīng)用上面的 規(guī)則

2.除法 /

特殊值處理規(guī)則:
? 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計算震放,即兩個正數(shù)或兩個負數(shù)相除的結(jié)果還是正數(shù)宾毒,而 如果只有一個操作數(shù)有符號,那么結(jié)果就是負數(shù)殿遂。如果商超過了 ECMAScript數(shù)值的表示范圍诈铛, 則返回 Infinity 或-Infinity;
? 如果有一個操作數(shù)是 NaN墨礁,則結(jié)果是 NaN幢竹;
? 如果是 Infinity 被 Infinity 除,則結(jié)果是 NaN恩静;
? 如果是零被零除焕毫,則結(jié)果是 NaN蹲坷;
? 如果是非零的有限數(shù)被零除,則結(jié)果是 Infinity 或-Infinity邑飒,取決于有符號操作數(shù)的符號循签;
? 如果是 Infinity 被任何非零數(shù)值除,則結(jié)果是 Infinity 或-Infinity疙咸,取決于有符號操作 數(shù)的符號县匠;
? 如果有一個操作數(shù)不是數(shù)值,則在后臺調(diào)用 Number()將其轉(zhuǎn)換為數(shù)值罕扎,然后再應(yīng)用上面的規(guī)則聚唐。

3.求模(余數(shù)) %

特殊值處理規(guī)則:
? 如果操作數(shù)都是數(shù)值,執(zhí)行常規(guī)的除法計算腔召,返回除得的余數(shù)杆查;
? 如果被除數(shù)是無窮大值而除數(shù)是有限大的數(shù)值,則結(jié)果是 NaN臀蛛;
? 如果被除數(shù)是有限大的數(shù)值而除數(shù)是零亲桦,則結(jié)果是 NaN;
? 如果是 Infinity 被 Infinity 除浊仆,則結(jié)果是 NaN客峭;
? 如果被除數(shù)是有限大的數(shù)值而除數(shù)是無窮大的數(shù)值,則結(jié)果是被除數(shù)抡柿;
? 如果被除數(shù)是零舔琅,則結(jié)果是零;
? 如果有一個操作數(shù)不是數(shù)值洲劣,則在后臺調(diào)用 Number()將其轉(zhuǎn)換為數(shù)值备蚓,然后再應(yīng)用上面的規(guī)則。

3.5.5 加性操作符:加法囱稽、減法
1.加法

操作數(shù)為如下類型時郊尝,處理如下:
數(shù)值:做加法
字符串:將字符串拼接,只有一個是字符串战惊,則將另一個也轉(zhuǎn)換為字符串流昏。
對象、數(shù)值吞获、布爾值况凉、null、undefined:調(diào)用 toString() 取得相應(yīng)字符串值衫哥,再拼接茎刚。

2.減法

操作數(shù)為如下類型時,處理如下:
數(shù)值:做減法
如果有一個操作數(shù)是字符串撤逢、布爾值、null、undefined:后臺先調(diào)用 Number() 函數(shù)將其轉(zhuǎn)換為數(shù)值蚊荣,再進行減法初狰。如果轉(zhuǎn)換的結(jié)果是 NaN,則減法的結(jié)果是 NaN互例;
如果有一個操作數(shù)是對象奢入,則調(diào)用 valueOf() 方法取得表示該對象的數(shù)值乙漓。得到的是 NaN键科,則減法的結(jié)果就是 NaN。如果沒有valueOf()方法阳掐,則調(diào)用其 toString() 方法并將得到的字符串轉(zhuǎn)換為數(shù)值糊秆。

3.5.6 關(guān)系操作符

小于(<)武福、大于(>)、小于等于(<=)和大于等于(>=)
執(zhí)行規(guī)則:
兩個都是數(shù)值:執(zhí)行數(shù)值比較
兩個都是字符串:比較兩個字符串對應(yīng)的字符編碼值
如果一個是數(shù)值:則將另一個操作數(shù)轉(zhuǎn)換為數(shù)值痘番,然后執(zhí)行數(shù)值比較
如果一個操作數(shù)是對象捉片,則調(diào)用這個對象的 valueOf()方法,用得到的結(jié)果按照前面的規(guī)則執(zhí) 行比較汞舱。如果對象沒有valueOf()方法伍纫,則調(diào)用 toString()方法,并用得到的結(jié)果根據(jù)前面 的規(guī)則執(zhí)行比較昂芜。
如果一個操作數(shù)是布爾值莹规,則先將其轉(zhuǎn)換為數(shù)值,然后再執(zhí)行比較泌神。

3.5.7 相等操作符
1. 相等和不相等 == / 良漱!=

先強制轉(zhuǎn)型,再比較是否相等
特殊情況及比較結(jié)果:


2. 全等和不全等 === /腻扇!==

只在兩個操作蘇未經(jīng)轉(zhuǎn)換就相等的情況下返回 true债热,即類型和值均相等。

3.5.8 條件操作符

var max = (num1 > num2) ? num1 : num2;
在這個例子中幼苛,max 中將會保存一個大的值窒篱。這個表達式的意思是:如果 num1 大于 num2(關(guān) 系表達式返回 true),則將 num1 的值賦給 max舶沿;如果 num1 小于或等于 num2(關(guān)系表達式返回 false)墙杯, 則將 num2 的值賦給 max。

3.5.9 賦值操作符

var num = 10 ; 將等號右側(cè)的值賦給左側(cè)變量括荡。
復合操作符:
num += 10高镐; 即為 num = num + 10 ;
同理還有:
? 乘/賦值(*=); ? 除/賦值(/=)畸冲; ? 模/賦值(%=)嫉髓; ? 加/賦值(+=)观腊; ? 減/賦值(-=); ? 左移/賦值(<<=)算行; ? 有符號右移/賦值(>>=)梧油;無符號右移/賦值(>>>=)。

3.5.10 逗號操作符

使用逗號操作符可以在一條語句中執(zhí)行多個操作州邢,如:

var num1=1, num2=2, num3=3;           //聲明多個變量儡陨。
var num = (5, 1, 4, 8, 0);    // 賦值 : num 的值為 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市量淌,隨后出現(xiàn)的幾起案子骗村,更是在濱河造成了極大的恐慌,老刑警劉巖呀枢,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胚股,死亡現(xiàn)場離奇詭異,居然都是意外死亡硫狞,警方通過查閱死者的電腦和手機信轿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來残吩,“玉大人财忽,你說我怎么就攤上這事∑辏” “怎么了即彪?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長活尊。 經(jīng)常有香客問我隶校,道長,這世上最難降的妖魔是什么蛹锰? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任深胳,我火速辦了婚禮,結(jié)果婚禮上铜犬,老公的妹妹穿的比我還像新娘舞终。我一直安慰自己,他們只是感情好癣猾,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布敛劝。 她就那樣靜靜地躺著,像睡著了一般纷宇。 火紅的嫁衣襯著肌膚如雪夸盟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天像捶,我揣著相機與錄音上陕,去河邊找鬼桩砰。 笑死,一個胖子當著我的面吹牛唆垃,可吹牛的內(nèi)容都是我干的五芝。 我是一名探鬼主播痘儡,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼辕万,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沉删?” 一聲冷哼從身側(cè)響起渐尿,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎矾瑰,沒想到半個月后砖茸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡殴穴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年凉夯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片采幌。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡劲够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出休傍,到底是詐尸還是另有隱情征绎,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布磨取,位于F島的核電站人柿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏忙厌。R本人自食惡果不足惜凫岖,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逢净。 院中可真熱鬧哥放,春花似錦、人聲如沸汹胃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽着饥。三九已至犀农,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宰掉,已是汗流浹背呵哨。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工赁濒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孟害。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓拒炎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挨务。 傳聞我的和親對象是個殘疾皇子击你,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是 JavaScript 語言? JavaScript 是一種輕量級的腳本語言谎柄。所謂“腳本語言”(script...
    oWSQo閱讀 1,790評論 0 1
  • 本章內(nèi)容 語法 數(shù)據(jù)類型 流控制語句 理解函數(shù) 3.1 語法 3.1.1 區(qū)分大小寫 區(qū)分大小寫 3.1.2 標識...
    悶油瓶小張閱讀 719評論 0 0
  • 1朝巫、標識符 標識符是指變量鸿摇、函數(shù)、屬性的名字劈猿,或函數(shù)的參數(shù)拙吉。 格式規(guī)則: 第一個字符必須是一個字母、下劃線(_)或...
    霜天曉閱讀 702評論 0 0
  • 第1章 JavaScript 簡介 JavaScript 具備與瀏覽器窗口及其內(nèi)容等幾乎所有方面交互的能力揪荣。 歐洲...
    力氣強閱讀 1,136評論 0 0
  • 午休時間在家筷黔,開著空調(diào),坐在飄窗上变逃,貪婪地看書必逆,很是愜意
    大樹的孩子閱讀 223評論 0 0