js基礎(chǔ)(一)

一個完整的JavaScript實現(xiàn)包含以下三個部分:

  • ECMAScript
  • DOM(文檔對象模型)
  • BOM(瀏覽器對象模型)

變量聲明

定義

  1. JavaScript的變量名可以使用_,數(shù)字惹盼,字母吃型,$組成碗短,不能以數(shù)字開頭;
  2. 定義變量時使用var操作符

注意:

  1. 變量名區(qū)分大小寫蓄诽;
  2. 推薦使用駝峰式命名規(guī)則碍侦;
  3. 保留字不能做變量名。

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

ECMAScript中有5種簡單數(shù)據(jù)類型(基本數(shù)據(jù)類型):Undefined痕慢、NullBoolean涌矢、Number掖举、String,還有一個復(fù)雜數(shù)據(jù)類型:Object

Null和Undefined

nullundefined 都可以表示“沒有”蒿辙,將變量賦值 undefinednull拇泛,語法上幾乎沒有區(qū)別

var a = undefined
var a = null

a 分別賦值時,效果幾乎等價思灌,在 if 語句中會被自動轉(zhuǎn)為 false

if (!undefined) {
    console.log('undefined is false')
}
//  undefined is false

if (!null) {
    console.log('null is false')
}
//  null is false

undefined == null
//  true

兩者的區(qū)別是:null 是一個表示“空”的對象俺叭,轉(zhuǎn)為數(shù)值時為0undefined是一個表示“此處無定義”的原始值泰偿,轉(zhuǎn)為數(shù)值時為NaN

Boolean

布爾值表示“真”熄守、“假”兩種狀態(tài),“真”用true表示耗跛,“假”用false表示裕照。

要將一個值轉(zhuǎn)換為其對應(yīng)的Boolean值,可以調(diào)用轉(zhuǎn)型函數(shù)Boolean():

var a = "Hello World"
var b = Boolean(a)  // true

以下為各數(shù)據(jù)類型對應(yīng)的轉(zhuǎn)換規(guī)則:

數(shù)據(jù)類型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean true false
String 任何非空字符串 (空字符串)
Number 任何非零數(shù)字值(包含無窮大) 0和NaN
Object 任何對象 null
Undefined n/a undefined

下列運(yùn)算符也可返回布爾值:

  • 前置邏輯運(yùn)算符:!
  • 相等運(yùn)算符:=== == !== !=
  • 比較運(yùn)算符:> < >= <=

Number

JavaScript 對整數(shù)提供四種進(jìn)制的表示方法:

0xff    // 255
0o377   // 255
0b11    // 3
  • 十進(jìn)制:沒有前導(dǎo)0的數(shù)值
  • 八進(jìn)制:有前綴 0o0O 的數(shù)值调塌,或者有前導(dǎo)0晋南、且只用到了0-7的八個阿拉伯?dāng)?shù)字的數(shù)值
  • 十六進(jìn)制:有前綴 0x0X 的數(shù)值
  • 二進(jìn)制:有前綴 0b0B 的數(shù)值

浮點數(shù)的最高精度是17位小數(shù),但在進(jìn)行算術(shù)計算時其精度度遠(yuǎn)遠(yuǎn)不如整數(shù)羔砾。例如:0.1加0.2的結(jié)果不是0.3负间,而是0.30000000000000004偶妖,涉及小數(shù)的比較和運(yùn)算需要小心。

數(shù)值范圍:ECMAScript能夠表示的最小數(shù)值保存在 Number.MIN_VALUE 中——在大多數(shù)瀏覽器中政溃,這個值是5e-324趾访,最大值存在 Number.MAX_VALUE 中——在大多數(shù)瀏覽器中,這個值是1.7976931348623157e+308董虱。除了出現(xiàn)了超出JavaScript數(shù)值范圍的值扼鞋,這個值會自動轉(zhuǎn)換成特殊的 Infinity 值。

NaN是JavaScript的特殊值愤诱,表示“非數(shù)字”(Not a Number)云头,用于表示一個本來要返回數(shù)值的操作數(shù)未返回數(shù)值的情況。例如:任何數(shù)值除以0會返回NaN转锈。

NaN具有的兩個特點:

  1. 任何涉及 NaN 的操作都會返回 NaN盘寡;
  2. NaN 與任何值都不相等楚殿,包括 NaN 本身撮慨。

針對這兩個特點,ECMAScript 定義了 isNaN() 函數(shù)脆粥,可判斷是否不是數(shù)值砌溺。

與數(shù)值相關(guān)的全局方法:parseInt() 和 parseFloat()

parseInt()將字符串轉(zhuǎn)為整數(shù),第一個參數(shù)為要轉(zhuǎn)換的值变隔,第二個參數(shù)表示被解析的值的進(jìn)制(在2-36之間):

parseInt('123')  // 123
parseInt('  12')    // 12
parseInt('1.23')    // 1
parseInt('12**')    // 12
parseInt('12e2')    // 12
parseInt('abc') // NaN
parseInt('+1')  // 1
parseInt('0x10')    // 16
parseInt('1000', 2) // 8
parseInt('1000', 6) // 256
parseInt('1000', 8) // 512

parseFloat()將字符串轉(zhuǎn)換為浮點數(shù):

parseFloat('3.14')  // 3.14
parseFloat('314e-2)    // 3.14
parseFloat('3.14more')  // 3.14
parseFloat('\t\r3.14\n')    // 3.14
parseFloat([])  // NaN
parseFloat('FF2')   // NaN
parseFloat('')  // NaN

parseFloat()會將空字符串轉(zhuǎn)為NaN

String

字符串是由零或多個16位Unicode字符組成的字符序列规伐,可用雙引號("")或單引號('')表示。

轉(zhuǎn)義:反斜杠(\)在字符串中可表示一些特殊字符匣缘,又稱轉(zhuǎn)義符:

  • \0 :null(\u0000)
  • \b :后退鍵(\u0008)
  • \f :換頁符(\u000C)
  • \n :換行符(\u000A)
  • \r :回車鍵(\u000D)
  • \t :制表符(\u0009)
  • \v :垂直制表符(\u000B)
  • ' :單引號(\u0027)
  • " :雙引號(\u0022)
  • \ :反斜杠(\u005C)

將值轉(zhuǎn)換為字符串的兩種方式:幾乎每個值都有的toString()方法和String()轉(zhuǎn)型函數(shù)猖闪。

var a = 11
var b = a.toString()    // "11"
var c = true
var d = c.toString()    // "true"

null undefined沒有toString()(),因此肌厨,在未確定需要轉(zhuǎn)換的值是不是nullundefined的情況下培慌,可以用String()方法。其轉(zhuǎn)換規(guī)則為:

  • 如果值有 toString() 方法柑爸,則調(diào)用該方法吵护;
  • 如果值是 null,則返回 "null"
  • 如果值是 undefined表鳍,則返回 "undefined"

Object

ECMAScript 中的對象是一組數(shù)據(jù)和功能的集合馅而,對象可通過執(zhí)行 new 操作符后跟要創(chuàng)建的對象類型的名稱來創(chuàng)建。如:

var o = new Object()

Object 的每個實例都具有下列的屬性和方法:

  • Constructor:保存用于創(chuàng)建當(dāng)前對象的函數(shù)譬圣;
  • hasOwnProperty(propertyName):用于檢查給定的屬性在當(dāng)前對象實例中(而不是在實例的原型中)是否存在瓮恭。其中,作為參數(shù)的屬性名(propertyName)必須以字符串形式指定厘熟;
  • propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用 for-in 語句來枚舉屯蹦;
  • toLocaleString():返回對象的字符串表示诸衔,該字符串與執(zhí)行環(huán)境的地區(qū)對應(yīng);
  • toString():返回對象的字符串表示颇玷;
  • valueOf():返回對象的字符串笨农、數(shù)值或布爾值表示。通常與 toString() 方法的返回值相同帖渠。

typeof操作符——用來檢測給定變量的數(shù)據(jù)類型

對給定值使用typeof操作符可能返回下列字符串:

  • "undefined"——如果該值未定義
  • "boolean"——如果該值為布爾值
  • "string"——如果該值是字符串
  • "number"——如果該值是數(shù)值
  • "object"——如果該值是對象或null
  • "function"——如果該值是函數(shù)

操作符

一元操作符:只能操作一個值的操作符

  • 遞增(++)和遞減(--)操作符

    前置操作符會先對值進(jìn)行操作谒亦;后置操作符會先取值再進(jìn)行操作:

    var a = 1
    var b = ++a +3   // 5
    var c = 1
    var d = c-- +3   // 4
    
  • 位操作符

    1. 按位非(NOT)
      按位非操作符由一個波浪線(~)表示,返回數(shù)值的反碼空郊。

    2. 按位與(AND)
      按位與操作符由一個和字符號(&)表示份招,將每個數(shù)值的每一位對齊,進(jìn)行 AND 操作狞甚。

    3. 按位或(OR)
      按位與操作符由一個豎線符合(|)表示锁摔。

    4. 按位異或(XOR)
      按位異或操作符由一個插入符號(^)表示。

布爾操作符

  • 邏輯非
    由一個嘆號(!)表示哼审,邏輯非會先將操作數(shù)轉(zhuǎn)換為一個布爾值谐腰,然后求反。

  • 邏輯與
    由兩個和號(&&)組成涩盾,有兩個操作數(shù)十气,當(dāng)且僅當(dāng)兩個操作數(shù)均為 true 時返回 true

  • 邏輯或
    由兩個豎線(||)表示春霍,有兩個操作數(shù)砸西,當(dāng)且僅當(dāng)兩個操作數(shù)均為 false 時返回 false

語句

if 語句

if (condition) {
    statement1
} else {
    statement2
}

condition 可以是任意表達(dá)式址儒,且會自動調(diào)用 Boolean() 轉(zhuǎn)換表達(dá)式的結(jié)果為一個布爾值芹枷。

do-while 語句

do-while 語句是一種后測試循環(huán)語句,即先執(zhí)行循環(huán)體中的代碼莲趣,再測試出口條件鸳慈。

do {
    statement
} while (expression)

while 語句

while 語句屬于前測試循環(huán)語句,先判斷出口條件是否滿足妖爷,再執(zhí)行循環(huán)體代碼蝶涩。

while (expression) {
    statement
}

for 語句

for (initialization; expression; post-loop-expression) {
    statement
}

for-in 語句

for-in 語句是一種精準(zhǔn)的迭代語句,可用來枚舉對象的屬性

for (property in expression) {
    statement
}

label 語句

使用 label 語句可以在代碼中添加標(biāo)簽

label: statement

break 和 continue 語句

break 和 continue 語句用于在循環(huán)體中精確控制代碼的執(zhí)行絮识。break 語句會立即退出循環(huán)绿聘,執(zhí)行循環(huán)體外的代碼;continue 語句則是退出當(dāng)前循環(huán)次舌,繼續(xù)執(zhí)行下一次循環(huán)熄攘。

with 語句

with 語句的作用是將代碼的作用域設(shè)置到一個特定的對象中。如

var qs = locatin.search.substring(1)
var hostName = location.hostName
var url = location.href

上面的代碼均用到了 location 對象彼念∨不可用 with 語句改寫:

with (location) {
    var qs = search.substring(1)
    var hostName = hostName
    var url = href
}

switch 語句

switch 語句是一種流控制語句

switch (expression) {
    case value: statement
        break;
    case value: statement
        break;
    ...
    default: statements
}

函數(shù)

通過函數(shù)可以封裝任意多條語句浅萧,可在任何地方調(diào)用,使用 function 關(guān)鍵字聲明哲思,后跟參數(shù)以及函數(shù)體:

function functionName (arg0, arg1, ... , argN) {
    statement
}

ECMAScript 函數(shù)無法實現(xiàn)重載

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洼畅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棚赔,更是在濱河造成了極大的恐慌帝簇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靠益,死亡現(xiàn)場離奇詭異丧肴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)胧后,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門芋浮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壳快,你說我怎么就攤上這事纸巷。” “怎么了濒憋?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵何暇,是天一觀的道長陶夜。 經(jīng)常有香客問我凛驮,道長,這世上最難降的妖魔是什么条辟? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任黔夭,我火速辦了婚禮,結(jié)果婚禮上羽嫡,老公的妹妹穿的比我還像新娘本姥。我一直安慰自己,他們只是感情好杭棵,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布婚惫。 她就那樣靜靜地躺著,像睡著了一般魂爪。 火紅的嫁衣襯著肌膚如雪先舷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天滓侍,我揣著相機(jī)與錄音蒋川,去河邊找鬼。 笑死撩笆,一個胖子當(dāng)著我的面吹牛捺球,可吹牛的內(nèi)容都是我干的缸浦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼氮兵,長吁一口氣:“原來是場噩夢啊……” “哼裂逐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泣栈,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤絮姆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秩霍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篙悯,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年铃绒,在試婚紗的時候發(fā)現(xiàn)自己被綠了鸽照。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡颠悬,死狀恐怖矮燎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赔癌,我是刑警寧澤诞外,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站灾票,受9級特大地震影響峡谊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刊苍,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一既们、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧正什,春花似錦啥纸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至主经,卻和暖如春荣暮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旨怠。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工渠驼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鉴腻。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烟逊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359