- 面向對象的語言.
- 腳本語言,不需要編譯,瀏覽器解釋即可運行 .
- 用于控制網頁的行為.
- 瀏覽器的
source
可以打斷點調試,console
輸入代碼可以執行
use strict指令:
在“嚴格模式”下運行js
代碼, 防止意外創建全局變量等, 提高代碼安全性和執行效率.
使用:
- 全局嚴格模式:在腳本的開頭添加
"use strict"
. - 函數級嚴格模式: 在函數的開頭添加
"use strict"
:function myFunction() {"use strict";// 僅該函數內部運行在嚴格模式下 }
js的引入
1. 內部腳本
js
可以放在任意位置,一般放在body
標簽底部.
<body><h1>Hello, World!</h1><script>console.log("Hello from inline script!");</script>
</body>
2. 外部腳本
<head><script src="script.js"></script>
</head>
基礎語法
js
區分大小寫,語句末尾的分號可有可無- 注釋和
java
一樣
輸出語句
window.alert()
: 彈出警告框, window.
可省略.
document.write()
: 顯示在頁面上.
console.log()
: 打印在控制臺.
基本數據類型
- 原始數據類型是不可變的,存儲在棧內存中,按值比較.
Number
:數字String
:字符串,用單引號、雙引號包裹Boolean
:布爾值Undefined
:變量未賦值.Null
:表示“無”或“空值”,類型是object
引用數據類型
-
引用數據類型是可變的,存儲在堆內存中,按引用比較
-
Object
:表示對象,可以存儲鍵值對let person = {name: 'Alice',age: 30 };
-
Array
:數組let numbers = [1, 2, 3, 4, 5];
-
Function
:函數也是對象function greet() {return 'Hello!'; }
-
Date
:日期和時間let now = new Date();
類型檢查
typeof
:檢查數據類型。
console.log(typeof num1); // "number"
console.log(typeof str1); // "string"
console.log(typeof isActive); // "boolean"
console.log(typeof notAssigned); // "undefined"
console.log(typeof emptyValue); // "object"
console.log(typeof person); // "object"
console.log(typeof numbers); // "object"
console.log(typeof greet); // "function"
字符串
length
: 字符串長度
charAt()
: 返回指定位置的字符
indexOf()
: 查找子字符串首次出現的位置
trim()
: 去除字符串兩邊的空格
substring()
: 截取字符串
變量
1. var
var
定義的變量可以被覆蓋.- 具有函數作用域, 在函數內聲明的
var
變量在函數內有效:
function testVar() {if (true) {var x = 10; // 函數作用域}console.log(x); // 輸出: 10
}
testVar();//在函數外不能訪問:
<script> function testVar() { if (true) { var x = 10; // 函數作用域 } } alert(x);
</script>
- 不受塊級作用域
{}
影響,即使聲明在塊內,塊外也可以訪問。
{var x = 10;
}
console.log(x); // 輸出: 10
2. let
- 具有塊級作用域:變量只在聲明的
{}
內有效,超出作用域不能訪問
<script> { let a = 1; } alert(a); //不會彈出警告框
</script>
- 不能重復定義
{ let a = 1; let a="s"; //報錯
}
3. const
-
作用域:和
let
一樣,也不能重復定義{const d = 20;console.log(d); // 輸出 20 } console.log(d); // 報錯: Uncaught ReferenceError: d is not defined
-
const
聲明的變量必須初始化. -
const
修飾的原始數據類型不能重新賦值 -
const
修飾的引用數據類型如對象,數組的內容可以修改,引用(地址)
不能修改。const f = 30; f = 40; // 報錯: TypeError: Assignment to constant variable.const arr = [1, 2, 3]; arr.push(4); // 合法操作 console.log(arr); // 輸出 [1, 2, 3, 4]
顯式類型轉換
轉換為字符串
console.log(String(123)); // 輸出 "123"
console.log((123).toString()); // 輸出 "123"
console.log(String(true)); // 輸出 "true"
console.log(String(null)); // 輸出 "null"
轉換為數字
console.log(Number("123")); // 輸出 123
console.log(Number("")); // 輸出 0
console.log(Number("123abc")); // 輸出 NaN
console.log(parseInt("123.45")); // 輸出 123
console.log(parseFloat("123.45")); // 輸出 123.45
轉換為布爾值
0
和NaN
是false
;- 空字符串是
false
; Null
和Undefined
是false
;
console.log(Boolean(1)); // 輸出 true
console.log(Boolean(0)); // 輸出 false
console.log(Boolean("")); // 輸出 false
console.log(Boolean("hello")); // 輸出 true
不要使用==
比較,使用===
等號,因為===
不僅比較值,還會比較類型是否相等.
循環
for...in
循環:
- 可用于遍歷對象,數組的屬性,不能遍歷字符串、
Set
、Map
. - 用于數組時,遍歷的是數組的索引,不是數組的值。
let obj = { name: "Alice", age: 25, city: "NY" };
for (const key in obj) {console.log(key, obj[key]);
}
// 輸出:
// name Alice
// age 25
// city NY
for...of
循環:
- 直接遍歷值,可用于數組、字符串、
Set
、Map
等,不能遍歷對象
let arr = ["a", "b", "c"];for (const value of arr) {console.log(value); // 輸出 "a", "b", "c"(值)
}
forEach()
循環
用于遍歷數組.
語法:
array.forEach(function(currentValue, index, array) {});//currentValue(必需):當前正在處理的元素。
//index(可選):當前元素的索引
//array(可選):調用 forEach() 的原數組
示例:
let fruits = ["apple", "banana", "orange"];fruits.forEach(function(fruit, index) {console.log(index + ": " + fruit);
});//輸出:
/*0: apple
1: banana
2: orange*/
let numbers = [1, 2, 3, 4];numbers.forEach(num => console.log(num * 2));//輸出:2 4 6 8
注意:
forEach()
無法中途退出循環(break
無效),return
也不會停止循環:
let arr = [1, 2, 3, 4, 5];arr.forEach(num => {if (num === 3) return; // 這里的 return 只會跳過當前迭代,不會終止循環console.log(num);
});
forEach()
不能直接修改原數組:
let arr = [1, 2, 3];arr.forEach(num => num = num * 2); // 這樣不會改變數組
console.log(arr); // [1, 2, 3]
forEach()
不會跳過 undefined
.