JavaScript 基礎知識
JavaSCript 基礎知識:變數、原始值和參考值、運算子、型別轉換、typeof 等
變數
var a; // 宣告
a = 1; // 賦值
var b = 2; // 宣告并賦值
var x = 1,
y,
z = 3; // 單一宣告方式
關鍵字
不能將關鍵字和保留字用作變數名或函式名
break
case
catch
continue
default
delete
do
else
finally
for
function
if
in
instanceof
new
return
switch
this
throw
try
typeof
var
void
while
with
保留字
一些保留字已經在 ES6 語法中使用
abstract
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile
原始值
-
JavaScript 有 5 種原始值,即 5 種基本型別
Number String Boolean undefined null -
基本型別根據宣告后所賦的值自動確定,稱之為弱型別語言
var a = 1; var str = "lean javascript"; var flag = true; var u = undefined; // 未定義,等同于只宣告不賦值 var n = null; // 空值,常用于初始化組件、銷毀函式 -
原始值存放在堆疊記憶體
var a = 1; // 在堆疊記憶體中開辟空間,存盤 1 指向 a var b = a; // 復制 a 的值,在堆疊記憶體開辟空間存盤,指向 b var a = 2; // 重新開辟一個堆疊記憶體空間,存盤 2 指向 a,原來的空間等待覆寫
參考值
-
常用的參考值,即參考型別
object array function data RegExp -
參考值存放在堆記憶體
var arr1 = [1,2,3,4]; // [1,2,3,4] 存放在堆記憶體中,堆疊記憶體中存放指向該陣列的地址 var arr2 = arr1; // arr1,arr2 都指向堆中的 [1,2,3,4] arr1.push(5); // push,對堆中的陣列進行操作 console.log(arr2); // 列印出 [1,2,3,4,5] arr1 = [1,2,3,4,5,6]; // 重新指向了堆記憶體中的 [1,2,3,4,5,6] console.log(arr2); // 依然列印出 [1,2,3,4,5]
錯誤
-
語法錯誤
一個代碼塊里代碼都不會執行
console.log(1); // 不會執行 console.log(2);// 使用中文分號,語法錯誤 console.log(3); // 不會執行 -
通用錯誤
前面會執行,后面不會
console.log(1); // 會執行 console.log(a);// a 未宣告,通用錯誤之參考錯誤 console.log(3); // 不會執行 -
一個
<script>代碼塊發生錯誤,其他沒有發生錯誤的代碼塊可以照常執行
運算子
-
賦值
var a = 1, // 賦值 b = 2, c = 3; var d = (a + b) * d; // 宣告 d -> 計算 -> 賦值 // 括號運算 > 普通運算 > 賦值 -
加法
var a = 1 + 1; // 2,加運算 var b = "str1" + "str2"; // str1str2,字串拼接 var c = "str1" + 1; // str11,字串拼接 var d = "str" + null + undefined + NaN; // 字串 + 任何型別都是字串 var e = 1 + 1 + "str" + (1 + 1); // 2str2 -
除法
var a = 0 / 0; // NaN,非數,數字型別 Number // 與 NaN 做任何運算都得出 NaN var b = "a" / "b"; // NaN var c = 1 / 0; // Infinity,無窮,數字型別 Number Var d = -1 / 0; // -Infinity -
取模
// 取模(取余) var a = 4 % 6; // 4 var b = 6 % a; // 2 var c = 4 % 0; // NaN,非數 -
比較
var a = 1 > 0, // true b = 1 > "0", // true,先把字串轉換成數字再比較 c = "a" > "b", // false,按照 ASCII 碼 d = "4.5" > "11", // true,按照 ASCII 碼,'4' > '1',后面不用比 e = "1.5" > "11"; // false,'1' = '1','.' < '1' var bool = 1 == 1; // true var bool = 1 == "1"; // true,相等不要求資料型別 var bool = 1 === "1"; // false,全等要資料型別一致 var bool = NaN == NaN; // false,NaN 與任何值不相等,包括它自己 -
邏輯
/* * 為假的值:undefined null "" 0 NaN flase * 除了上述,全部為真 */ var a = 1 && 2; // 2 var b = 1 || 2; // 1 // &&,遇真往后走,遇假或走完,回傳當前值 // ||,遇假往后走,遇真或走完,回傳當前值 var c = !1; // false
條件控制
-
if
var a = 65; if(a >= 60 && a <= 100) { console.log("及格"); } else if(a >= 0 && a < 60) { console.log("不及格"); } else { console.log("分數有誤"); } // 自上而下判斷,一旦滿足,后面不看 -
switch
var a = 65; switch(true) { // 用 switch 實作 if case a >= 60 && a <= 100: console.log("及格"); break; case a >= 0 && a < 60: console.log("不及格"); break; default: console.log("分數有誤"); } // 如果不加 break,后面的 case 塊都會執行
回圈
-
if
for(var i = 0; i < 10; i++) { // ... } /* * 1.宣告變數 * 2.判斷條件 * 3.執行代碼 * 4.后續動作 * 重復 2 3 4,一旦判斷條件為 flase,結束回圈 */列印出 100 以內的質數
var c = 0; for(var i = 2; i < 100; i++) { // 1 不是質數 for(var j = 1; j <= i; j++) { if(i % j == 0){ c++; } } if(c == 2) { console.log(i); } } -
while
var i = 0; // while while( i < 10) { // ... i++; } // do...while 先執行一次代碼塊,再判斷是否后續 do { i++; }while(i < 10);
typeof
-
typeof 是一個運算子,用來判斷資料型別
-
typeof 的使用
typeof(1); // 對運算式做運算,推薦寫法 typeof 1; // 對變數做運算 -
typeof 的回傳值
typeof(123); // number typeof("123"); // string typeof(true) // boolean typeof(a); // undefined,a 未定義 typeof({}); // object typeof([]); // object typeof(new Array(1,2,3)); // object /* *這里回傳的 object 是包含 普通 object、array 的一個大的概念 */ typeof(null); // object,理解為空物件 typeof(Array) // function,理解為物件的構造方法
型別轉換
-
顯示型別轉換
Number
Number("123"); // 123 Number("a"); // NaN Number(true); // 1 Number(undefined); // NaN Number(null); // 0parseInt
parseInt(”123.99“); // 123,取整數部分 parseInt("a"); // NaN parseInt(true); // NaN parseInt(undefined); // NaN parseInt(null); // NaN // 第二引數,給定進制 parseInt(10,16); // 16,16 進制的 10 -> 10 進制的 16 parseInt("b",16); // 11,16 進制的 b -> 10 進制的 11 // 以數字或正負號開頭,提取前面的數字 parseInt("abc123"); // NaN parseInt("-123abc"); // -123parseFloat
parseFloat("3.1415"); // 3.1415 parseFloat("3.145").toFixed(2); // 3.15,四舍五入,保留兩位 // 以數字或正負號開頭,提取前面的數字 parseFloat("3abc"); //toString
parseInt("100").toString(16) // "64",字串 “100” -> 數字 100 -> 16 進制數的字串 Boolean("abc"); // true Boolean("abc").toString(); // "true" -
隱式型別轉換
string 轉換 number
// 正負號 string -> number console.log(+"123"); // 123 console.log(typeof(-"123"); // number // 自增、自減 string -> number var a = "1"; a++; // 減、乘、除、取模 string -> number var c = "3" * 2; // 6 // 數字與字串比大小 string -> number var d = 1 > "2"; // false // 數字與字串是否相等 string -> number var e = 1 == "1"; // true var f = 1 != "2"; // true // 數字與字串是否全等 不進行轉換 var e = 1 === "1"; // falsenumber 轉換 string
// 字串拼接 number -> string var b = "str" + 1; // str1boolean 轉換 number
// 布爾隱式轉換為數字 var g = 2 > 1 = 1; // true,2 > 1 -> true -> 1,1 = 1 -> trueundefined 和 null
// undefined、null var h = undefined > 0, // false i = undefined < 0, // false j = undefined == 0; // false // undefined 和 0 比較都回傳 false,null 也是如此 var k = undefined + undefined; // NaN var l = null + null; // 0 var m = null + undefined; // NaN var o = undefined == null; // trueisNaN()
// isNaN(),首先經過 Number(),判斷結果是否是 NaN isNaN("123"); // false isNaN("123abc"); // true isNaN(null); // false,null -> 0 isNaN(undefined); // true,undefined -> NaN
ASCII 與 Unicode
-
ASCII 碼
- 表一 0 - 127,表二 128 - 255
- 每個字符一個位元組
-
Unicode
- 前 255 位是 ASCII 碼,每個字符一個位元組
- 256 位及之后,每個字符占兩個位元組
-
獲取 Unicode 編碼
// string 的方法 charCodeAt(index) "a".charCodeAt(0); // a -> 97
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/141705.html
標籤:JavaScript
上一篇:AJAX
