一、JavaScript的歷史
略
二、ECMAScript
注:ES6就是指ECMAScript 6。
儘管 ECMAScript 是一個重要的標準,但它並不是 JavaScript 唯一的部分,當然,也不是唯一被標準化的部分。實際上,一個完整的 JavaScript 實現是由以下 3 個不同部分組成的:
核心(ECMAScript)
文檔對象模型(DOM) Document object model (整合js,css,html)
瀏覽器對象模型(BOM) Broswer object model(整合js和瀏覽器)
簡單地說,ECMAScript 描述了JavaScript語言本身的相關內容。
JavaScript 是腳本語言
JavaScript 是一種輕量級的編程語言。
JavaScript 是可插入 HTML 頁面的編程代碼。
JavaScript 插入 HTML 頁面後,可由所有的現代瀏覽器執行。
三、JavaScript引入方式
1、在HTML文件的Script標籤內寫代碼
<script>
// 在這裏寫你的JS代碼
</script>
2、HTML文件引入額外的JS文件
<script src="myscript.js"></script>
四、JavaScript語言規範
1、註釋(註釋是代碼之母)
// 這是單行註釋
/*
這是多行註釋
*/
2、結束符
JavaScript中的語句要以分號(;)爲結束符。
五、JavaScript語言基礎
1、變量聲明
JavaScript的變量名可以使用_,數字,字母,$組成,不能以數字開頭。
聲明變量使用 var 變量名; 的格式來進行聲明
var name = "Alex";
var age = 18;
注意:
變量名是區分大小寫的。
推薦使用駝峯式命名規則。
保留字不能用做變量名。
六、JavaScript數據類型
1、JavaScript擁有動態類型
var x; // 此時x是undefined
var x = 1; // 此時x是數字
var x = "Alex" // 此時x是字符串
2、數字類型
JavaScript不區分整型和浮點型,就只有一種數字類型。
var a = 12.34;
var b = 20;
var c = 123e5; // 12300000
var d = 123e-5; // 0.00123
3、還有一種NaN,表示不是一個數字(Not a Number)。
常用方法:
parseInt("123") // 返回123
parseInt("ABC") // 返回NaN,NaN屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。
parseFloat("123.456") // 返回123.456
4、字符串
var a = "Hello"
var b = "world;
var c = a + b;
console.log(c); // 得到Helloworld
常用方法:
方法 | 說明 |
.length | 返回長度 |
.trim() | 移除空白 |
.trimLeft() | 移除左邊的空白 |
.trimRight() | 移除右邊的空白 |
.charAt(n) | 返回第n個字符 |
.concat(value, ...) | 拼接 |
.indexOf(substring, start) | 子序列位置 |
.substring(from, to) | 根據索引獲取子序列 |
.slice(start, end) | 切片 |
.toLowerCase() | 小寫 |
.toUpperCase() | 大寫 |
.split(delimiter, limit) | 分割 |
拼接字符串一般使用“+”
補充:slice和ubstirng的區別:
string.slice(start, stop)和string.substring(start, stop):
兩者的相同點:
如果start等於end,返回空字符串
如果stop參數省略,則取到字符串末
如果某個參數超過string的長度,這個參數會被替換爲string的長度
substirng()的特點:
如果 start > stop ,start和stop將被交換
如果參數是負數或者不是數字,將會被0替換
silce()的特點:
如果 start > stop 不會交換兩者
如果start小於0,則切割從字符串末尾往前數的第abs(start)個的字符開始(包括該位置的字符)
如果stop小於0,則切割在從字符串末尾往前數的第abs(stop)個字符結束(不包含該位置字符)
5、布爾類型 區別於Python,true和false都是小寫。
var a = true;
var b = false;
""(空字符串)、0、null、undefined、NaN都是false。
6、數組 類似於Python中的列表。
var a = [123, "ABC"];
console.log(a[1]); // 輸出"ABC"
常用方法:
方法 | 說明 |
.length | 數組的大小 |
.push(ele) | 尾部追加元素 |
.pop() | 獲取尾部的元素 |
.unshift(ele) | 頭部插入元素 |
.shift() | 頭部移除元素 |
.slice(start, end) | 切片 |
.reverse() | 反轉 |
.join(seq) | 將數組元素連接成字符串 |
.concat(val, ...) | 連接數組 |
.sort() | 排序 |
補充:關於sort的問題:
如果調用sort方法時沒有傳入參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字符串(如有必要),以便進行比較。
如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
若 a 等於 b,則返回 0。
若 a 大於 b,則返回一個大於 0 的值。
// 根據上面的規則自行實現一個排序函數:
function sortNumber(a,b) {
return a - b
}
// 調用sort方法時將定義好的排序函數傳入即可。
stringObj.sort(sortNumber)
可以使用以下方式遍歷數組中的元素:
var a = [10, 20, 30, 40];
for (var i=0;i<a.length;i++) {
console.log(i);
}
7、null和undefined
null表示值是空,一般在需要指定或清空一個變量時纔會使用,如 name=null;
undefined表示當聲明一個變量但未初始化時,該變量的默認值是undefined。還有就是函數無明確的返回值時,返回的也是undefined。
null表示變量的值是空,undefined則表示只聲明瞭變量,但還沒有賦值。
8、類型查詢
typeof是一個一元運算符(就像++,--,!,- 等一元運算符),不是一個函數,也不是一個語句。
typeof "abc" // "string"
typeof null // "object"
typeof true // "boolean"
typeof 123 // "number"
對變量或值調用 typeof 運算符將返回下列值之一:
undefined - 如果變量是 Undefined 類型的
boolean - 如果變量是 Boolean 類型的
number - 如果變量是 Number 類型的
string - 如果變量是 String 類型的
object - 如果變量是一種引用類型或 Null 類型的
六、運算符
1、算數運算符
+ - * / % ++ --
2、比較運算符
> >= < <= != == === !==
注意:
1 == “1” // true
1 === "1" // false
3、邏輯運算符
&& || !
4、賦值運算符
= += -= *= /=
七、流程控制
1、if-else
var a = 10;
if (a > 5){
console.log("yes");
}else {
console.log("no");
}
2、if-else if-else
var a = 10;
if (a > 5){
console.log("a > 5");
}else if (a < 5) {
console.log("a < 5");
}else {
console.log("a = 5");
}
3、switch
var day = new Date().getDay();
switch (day) {
case 0:
console.log("Sunday");
break;
case 1:
console.log("Monday");
break;
default:
console.log("...")
}
注意:switch中的case子句通常都會加break語句,否則程序會繼續執行後續case中的語句。
4、for
for (var i=0;i<10;i++) {
console.log(i);
}
5、while
var i = 0;
while (i < 10) {
console.log(i);
i++;
}
6、三元運算
var a = 1;
var b = 2;
var c = a > b ? a : b
八、函數
1、函數定義
JavaScript中的函數和Python中的非常類似,只是定義方式有點區別。
// 普通函數定義
function f1() {
console.log("Hello world!");
}
// 帶參數的函數
function f2(a, b) {
console.log(arguments); // 內置的arguments對象
console.log(arguments.length);
console.log(a, b);
}
// 帶返回值的函數
function sum(a, b){
return a + b;
}
sum(1, 2); // 調用函數
// 匿名函數方式
var sum = function(a, b){
return a + b;
}
sum(1, 2);
// 立即執行函數
(function(a, b){
return a + b;
})(1, 2);
2、arguments
function add(a,b){
console.log(a+b);
console.log(arguments.length)
}
add(1,2)
3、函數的全局變量和局部變量
局部變量:
在JavaScript函數內部聲明的變量(使用 var)是局部變量,所以只能在函數內部訪問它(該變量的作用域是函數內部)。只要函數運行完畢,本地變量就會被刪除。
全局變量:
在函數外聲明的變量是全局變量,網頁上的所有腳本和函數都能訪問它。
變量生存週期:
JavaScript變量的生命期從它們被聲明的時間開始。
局部變量會在函數運行以後被刪除。
全局變量會在頁面關閉後被刪除。
4、作用域
首先在函數內部查找變量,找不到則到外層函數查找,逐步找到最外層。
幾個例子:
1)
var city = "BeiJing";
function f() {
var city = "ShangHai";
function inner(){
var city = "ShenZhen";
console.log(city);
}
inner();
}
f(); //輸出結果是?ShenZhen
2)
var city = "BeiJing";
function Bar() {
console.log(city);
}
function f() {
var city = "ShangHai";
return Bar;
}
var ret = f();
ret(); // 打印結果是?Beijing
3)閉包
var city = "BeiJing";
function f(){
var city = "ShangHai";
function inner(){
console.log(city);
}
return inner;
}
var ret = f();
ret(); // 打印結果是?ShangHai