1. 程式人生 > >你不知道的javaScript筆記(4)

你不知道的javaScript筆記(4)

作用域 能夠 max rip 指數 upper 是否 進制 spa

類型:

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"

返回"string"

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)