你不知道的javaScript筆記(4)
類型:
JavaScript 有7種內置類型
空值 (null)
未定義(undefined)
布爾值(boolean)
數字(number)
字符串(string)
對象(object)
符號(symbol)
除對象以外,其他統稱為“基本類型”
用typeof 運算符來查看值的類型
typeof undefined === "undefined"; // true
typeof true === "boolean"; // true
typeof 42 === "number"; // true
typeof "42" === "string"; // true
typeof {life:42} === "object"; // true
typeof Symbol() === "symbol"; // true
typeof null === "object" // true
我們需要使用復合條件來檢測null 值的類型
var a = null;
(!a && typeof a === "object"); true
null 是假值 是唯一一個用typeof 檢測會返回 “object” 的基本類型
函數是對象的一個子類型,函數是可調用的對象,他有一個內部屬性[Call]該屬性使其可以被調用。
函數對象的的length 屬性是其聲明的參數的個數:
function a(a,c){
}
a.length; // 2
數組也是對象的一個子類型,其length 是元素的一個數。
typeof [1,2,3] ==== "object"; // true
值和類型
Javascrpit 中的變量是沒有類型的,只有值才有,變量可以隨時持有任何類型的值。
typeof 運算符總是會返回一個字符串:
typeof typeof 42; // "string"
typeof 42 首先返回字符串“number”,然後typeof "number"
undefined 和 undeclared
變量在已聲明但未賦值的時候是undefined.
沒有在作用域中聲明的過的變量是undeclared 的。
但是往往都是這兩種情況都會是undefined ,瀏覽器處理問題。
全局變量可以通過window. 來訪問。
數組:
在創建稀疏數組,既含有空白或空缺的數組
var a = [ ];
a[0] = 1;
// 此處沒有設置a[1] 單元
a[2] = [3];
a[1]; //undefined
a.length; // 3
可以通過數字進行索引,也可以包含字符串鍵值和屬性。(建議數字索引)
var a = [ ];
a[0] = 1;
a["foobar"] = 2;
a.length; 1
a["foobar"]; // 2
a.foobar; // 2
類數組
工具函數slice(...) 經常被用於類型轉換
function foo(){
var arr = Array.prototype.slice.call(arguments);
arr.push("bam");
console.log(arr);
}
foo("bar","baz"); // ["bar","baz","bam"]
ES6 中的內置工具Array.from(...) 也能實現同樣的功能。
var arr = Array.from(argments);
字符串
借用數組的非變更方法來處理字符串
var a = "foo";
a.join; // undefined
a.map; // undefined
var c = Array.prototype.join.call(a,"-");
var d = Array.prototype.map.call(a,function(v){
return v.toUpperCase() + ".";
}).join("");
c; // "f-o-o"
d; // "F.o.o"
先將字符串轉換為數組,待處理完畢在將結果換回字符串。
var a = "foo";
var c = a
// 將a的值轉換為字符數組
.split("")
// 將數組中的字符進行倒轉
.reverse()
// 將數組中的字符拼接回字符串
.join("");
c; // "oof"
數字
JavaScript 只有一種數值類型: number(數字);
數字的語法
數字常量一般用十進制表示
var a = 42;
var b = 42.3;
數字前面的0可以忽略:
var a = 0.42;
var b = .42;
小數點後小數部分最後面的0 可以忽略。
var a = 42.0;
var b = 42.;(不建議這樣寫)
特別大或者特別小的數字默認用指數格式顯示,與toExponential()函數輸出的結果相同。
var a = 5E10;
a;
a.toExponential(); // "5e+10"
var b = a * a;
b; // 2.5e+21
var c = 1 / a;
c; // 2e-11
指定小數顯示的位數
var a = 42.59;
a.toFixed(0); // "43"
a.toFixed(1); // "43.6"
a.toFixed(2); // "43.59"
a.toFixed(3); // "43.590"
toPrecision(..) 方法用來指定有效數位的顯示數
var a = 42.59;
a.toPrecision(1); // "4e+1"
a.toPrecision(2); // "43"
a.toPrecision(3); // "42.6"
a.toPrecision(4); // "42.59"
a.toPrecision(5); // "42.590"
(適用於數字變量,也使用於數字常量)
較小的數值
0.1 + 0.2 === 0.3; // false
可以使用Number.EPSILON 來比較兩個數字是否相等(在指定的誤差範圍內)
整數的安全範圍
最大數為 2^53 - 1, 即9007199254740991 Number.MAX_SAFE_INTEGER
最小整數為 -9007199254740991 Number.MIN_SAFE_INTEGER
整數檢測
要檢測一個值是否是整數,ES6 Number.isInteger(...)
Number.isInteger(42); // true
Number.isInteger(42.3); // false
32 位有符號整數
雖然整數最大能夠達到53位,但有些數字操作數字操作只是用32為數字。
特殊數值
不是值的值
undefined 類型只有一個值,即undefined
null 類型也只有一個值 ,即 null
undefined
void 運算符
undefined 是一個內置標識符,它的值為undefined, 通過void
運算即可得到此值。
特殊數字
不是數字的數字
數學運算的操作數不是數字類型,就無法返回一個有效的數字,這
種情況下返回的值就是NaN.
不是數字的數字,仍然是數字類型。
執行數學運算沒有成功,這是失敗返回的結果。
無窮數
正無窮數 Infinity
負無窮數 -Infinity
特殊等式
ES6 Object.is(...)來判斷兩個值是否絕對相等。
var b = -3 * 0;
Object.is(b, -0); // true
Object.is(b,0); // false
值和引用
JavaScript 對值和引用的賦值/傳遞在語法上沒有區別。
var a = 2;
var b = a; // b 是a 的值的一個副本。
b++ ;
a; // 2
b; // 3
var c = [1,2,3];
var d = c; // d 是[1,2,3]的一個引用
d,push(4);
c; // [1,2,3,4]
d; // [1,2,3,4]
簡單值是通過值復制來賦值、傳遞, unll,undefined,字符串,數字,布爾和 symbol
復合值,對象函數,則通過引用復制的方式來賦值/傳遞。
由於引用指向的是值本身而非變量,所以一個引用無法更改另一個引用指向。
var a = [1,2,3,4];
var b = a;
a; // [1,2,3,4]
b; // [1,2,3]
// 然後
b = [1,2,3];
a; // [1,2,3]
b; // [4,5,6]
你不知道的javaScript筆記(4)