快速入門

數(shù)據(jù)類型和變量

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

Number

123(正常數(shù)字)、NaN(不是數(shù)字)、Infinity(無限大)
16進制表示:0xff19

比較運算符

==會自動轉(zhuǎn)換數(shù)據(jù)類型再比較,會得到非常詭異的結(jié)果。
===不會轉(zhuǎn)換類型。先判斷數(shù)據(jù)類型是否一致,一致的話再比較具體值。
特殊:

  • NaN===NaN;//false
    唯一判斷NaN的方法是通過isNaN()
    isNaN(NaN);//true
  • 浮點數(shù)由于精度的問題,比較不會相等。
    1/3===(1-2/3);//false
    應該用:Math.abs(1/3-(1-2/3))<0.000001;//true

null和undefined

null表示空值。0是一個數(shù)字。''是一個空字符串。

JavaScript的設計者希望用null表示一個空的值,而undefined表示值未定義。事實證明,這并沒有什么卵用,區(qū)分兩者的意義不大。大多數(shù)情況下,我們都應該用null。undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用。

數(shù)組

創(chuàng)建方法:

  • [1,2,'abc']
  • new Array(1,2,3)

從可讀性考慮,建議使用第一種方法來創(chuàng)建數(shù)組。
數(shù)組元素通過索引來訪問:

var arr = [1,2,3];
console.log(arr[0]);

對象

JavaScript的對象是一組由鍵-值組成的無序集合。

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

變量

strict模式

JavaScript在設計之初,為了方便初學者學習,并不強制要求用var申明變量。這個設計錯誤帶來了嚴重的后果:如果一個變量沒有通過var申明就被使用,那么該變量就自動被申明為全局變量。
在同一個頁面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了變量i,將造成變量i互相影響,產(chǎn)生難以調(diào)試的錯誤結(jié)果。

使用var申明的變量則不是全局變量,它的范圍被限制在該變量被申明的函數(shù)體內(nèi)。

在strict模式下運行的JavaScript代碼,強制通過var申明變量,未使用var申明變量就使用的,將導致運行錯誤。
啟用strict模式的方法是在JavaScript代碼的第一行寫上:
'use strict';

字符串

轉(zhuǎn)義:
\n:換行
\\:\(兩個反斜杠轉(zhuǎn)義成一個斜杠)
ASCII字符可以用\x##形式的十六進制表示:
\x41:A
\u####表示一個Unicode字符:
\u4e2d\u6587:中文

es6新增換行字符串的表示:

var str = `你好
我是
一棵樹`;
代碼 含義
s.length 長度
s[2] 區(qū)字符串某個字符,類似數(shù)組。索引越界不會報錯,返回undefined

注意:字符串是不可變的,如果對字符串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果。

var s = 'Test';
s[0] = 'X';
alert(s); // s仍然為'Test'
代碼(調(diào)用這些方法不會改變原來的字符串,而是返回一個新字符串) 含義
s.toUpperCase 大寫
s.toLowerCase 小寫
'hello,world'.indexOf('world') 返回7(注意區(qū)分大小寫)
s.substring(0,10) 返回字串,注意前包后不包。沒有第二個參數(shù)代表到最后

數(shù)組

arr.length來獲取數(shù)組長度
注意:

  • 直接給Array的length賦值會改變Array的大小。
var arr = [1, 2, 3];
arr.length; // 3
arr.length = 6;
arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, undefined]
arr.length = 2;arr; // arr變?yōu)閇1, 2]
  • 如果通過索引賦值時,索引超過了范圍,同樣會引起Array
    大小的變化
var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr變?yōu)閇1, 2, 3, undefined, undefined, 'x']
方法 含義
arr.indexOf(10); ie8不兼容該方法,可以使用$.inArray(value,array)代替。注意10和'10'不是一回事。
arr.slice(2,4) 對應str.substring。如果沒有參數(shù)相當于復制整個數(shù)組。var copy = arr.slice()
arr.push(1,2) 向數(shù)組中添加,返回數(shù)組新長度
arr.pop() 返回并刪除數(shù)組最后一個元素??諗?shù)組不會報錯,而是返回undefined
arr.unshift(1,2) 類似push,從數(shù)組開頭添加
arr.shift() 返回并刪除數(shù)組第一個元素
arr.sort() 對數(shù)組進行排序
arr.reverse() 對數(shù)組進行反轉(zhuǎn)
splice 從指定索引刪除n個元素,然后再插入幾個元素
arr1.concat(arr2); 將兩個數(shù)組進行拼接并返回新數(shù)組(并沒有修改當前數(shù)組)
arr.join('-') 將數(shù)組的每一個元素用指定字符串連接,然后返回字符串。
``
``
``
``
``

splice

var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始刪除3個元素,然后再添加兩個元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只刪除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不刪除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因為沒有刪除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

join

var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'

對象

var xiaoming = {
    name: '小明',
    birth: 1990,
    school: 'No.1 Middle School',
    height: 1.70,
    weight: 65,
    score: null
};

訪問屬性是通過.操作符完成的,但這要求屬性名必須是一個有效的變量名。如果屬性名包含特殊字符,就必須用''括起來:

var xiaohong = {
    name: '小紅',
    'middle-school': 'No.1 Middle School'
};
xiaohong['middle-school'];
xiaohong.name;
代碼 含義
xiaohong.sex='男'; 給對象添加屬性
delete xiaohong.sex; 刪除對象的屬性
'name' in xiaohong 判斷某個對象是否擁有某個屬性(這個屬性有可能是繼承來的)。
xiaohong.hasOwnProperty('name') 判斷對象自身是否擁有某個屬性

條件判斷

if-else

注意:JavaScript把null、undefined、0、NaN、''都視為false。

循環(huán)

for(;;)

for...in(可以把一個對象的所有屬性依次循環(huán)出來)

for...of(for in和for of的差別就是,for in操作數(shù)組、字符串等取出來的是索引key,for of操作數(shù)組、字符串等取出來的是值value)

var o = {
    name: 'Jack',
    age: 20,
    city: 'Beijing'
};
for (var key in o) {
    if (o.hasOwnProperty(key)) {//過濾掉繼承過來的屬性
        alert(key); // 'name', 'age', 'city'
    }
}

由于Array也是對象,而它的每個元素的索引被視為對象的屬性,因此,for ... in循環(huán)可以直接循環(huán)出Array的索引(這里得出來的索引是String而不是Number):

var a = ['A', 'B', 'C'];
for (var i in a) {
    alert(i); // '0', '1', '2'
    alert(a[i]); // 'A', 'B', 'C'
}

while

do...while

Map和Set

JavaScript的默認對象表示方式{}可以視為其他語言中的Map或Dictionary的數(shù)據(jù)結(jié)構,即一組鍵值對。

但是JavaScript的對象有個小問題,就是鍵必須是字符串。但實際上Number或者其他數(shù)據(jù)類型作為鍵也是非常合理的。

為了解決這個問題,最新的ES6規(guī)范引入了新的數(shù)據(jù)類型Map。

'use strict';
var m = new Map();
var s = new Set();
alert('你的瀏覽器支持Map和Set!');

iterable

遍歷Array可以采用下標循環(huán),遍歷Map和Set就無法使用下標。為了統(tǒng)一集合類型,ES6標準引入了新的iterable類型,Array、Map和Set都屬于iterable類型。

具有iterable類型的集合可以通過新的for ... of循環(huán)來遍歷。

'use strict';
var a = [1, 2, 3];
for (var x of a) {
}
alert('你的瀏覽器支持for ... of');
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 本文摘自廖雪峰JavaScript教程 1. 使用方式 JavaScript代碼可以直接嵌在網(wǎng)頁的任何地方,不過通...
    Hobson閱讀 599評論 0 0
  • 廖雪峰js教程 查漏補缺 一.基本類型和變量 1.注意相等運算符 第一種是==比較,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較,很...
    qqqc閱讀 281評論 0 0
  • 基本語法 賦值語句 字符串 每個語句用分號結(jié)束,不介意一行寫多個語句 注釋 大小寫 嚴格區(qū)分大小 數(shù)據(jù)類型和變量 ...
    陸小琪閱讀 314評論 0 0
  • 自駕游的必經(jīng)線路上,有一片森林。 草木郁郁蔥蔥,鳥鳴啾啾不絕于耳,花香沁人心脾,是天然的露營佳處。 但今天是星期三...
    鋼鐵瑪利亞閱讀 472評論 1 5
  • 對于報表中的每一個數(shù)字 問 what when how why why not 然后找到 what to do 而...
    小魔女jenny閱讀 247評論 0 0

友情鏈接更多精彩內(nèi)容