javascript基礎細節

語法部分:

1.type 屬性: 默認的 type 就是 javascript, 因此沒必要顯式指定 type 爲 javascript。
2.javascript 不強制在每一個語句結尾加 「;」 , javascript 會自動加分號, 可是在某些狀況下會改變程序的語義, 因此最好主動加 「;」。
3.兩個相等運算符比較javascript

‘==’ 相等( 值相等 ), 它會自動轉換數據類型再比較, 不少時候會獲得很是詭異的結果java

‘===’ 嚴格相等( 數據類型和值都相等 ) , 它不會自動轉換數據類型, 若是數據類型不一致, 返回false, 若是一致, 再比較
4.NaN 與全部其餘值都不相等, 包括它本身:數組

NaN === NaN; // falseapp

惟一能判斷 NaN 的方法是經過 isNaN() 函數函數

isNaN(NaN); // true
5.浮點數比較this

浮點數在運算過程當中會產生偏差, 由於計算機沒法精確表示無限循環小數。 要比較兩個浮點數是否相等, 只能計算它們之差的絕對值, 看是否小於某個閾值:Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true
6.null 和 undefinedprototype

大多數狀況下,咱們都應該用 null , undefined 僅僅在判斷函數參數是否傳遞的狀況下有用
7.出於代碼的可讀性考慮,建立數組建議使用 '[ ]',而不使用 'new Array';
8.若是一個變量沒有經過 'var' 聲明就被使用,那麼該變量就自動被聲明爲全局變量。使用 var 聲明的變量則不是全局變量,它的範圍就該被限制在該變量被聲明的函數體內
9.啓用 strict 模式(強制經過 var 聲明變量)
10.多行字符串用反引號表示
11.使用模版字符串
12.要獲取字符串某個指定位置的字符,使用相似 Array 的下標操做, 索引號從 0 開始。 字符串是不可變的, 若是對字符串的某個索引賦值, 不會有任何錯誤,可是也沒有任何效果
13.直接給 Array 的 length 賦一個新的值會致使 Array 大小的變化
14.若是經過索引賦值時, 索引超過了範圍, 一樣會引發 Array 大小的變化, 可是不會有任何錯誤, 在編寫代碼時, 不建議直接修改 Array 的大小, 訪問索引時要確保索引不會越界
15.數字 1 和字符串 '1' 是不一樣的元素
16.slice() 的起止參數包括開始索引, 不包括結束索引。
17.若是不給 slice() 傳遞任何參數, 它就會從頭至尾截取全部元素。 利用這一點, 咱們能夠很容易地複製一個 Array
18.空數組繼續 pop 不會報錯,而是返回 undefined
19.concat() 方法並無修改當前 Array, 而是返回了一個新的 Arrayconcat() 方法能夠接收任意個元素和 Array, 而且自動把 Array 拆開, 而後所有添加到新的 Array
20.javascript 對象屬性名必須是一個有效的變量名。 若是屬性名包含特殊字符, 就必須用 '' 括起來
21.若是咱們要檢測 xiaoming 是否擁有某一屬性, 能夠用in操做符, 不過要當心, 若是 in 判斷一個屬性存在, 這個屬性不必定是xiaoming 的, 它多是 xiaoming 繼承獲得的
22.要判斷一個屬性是不是 xiaoming 自身擁有的,而不是繼承獲得的,能夠用 hasOwnProperty() 方法
23.JavaScript把 nullundefined0NaN 和空字符串 '' 視爲 false,其餘值一律視爲 true
24.因爲 Array 也是對象, 而它的每一個元素的索引被視爲對象的屬性, 所以, for ... in 循環能夠直接循環出 Array 的索引
25.for ... in 循環因爲歷史遺留問題, 它遍歷的其實是對象的屬性名稱, for ... of` 循環則徹底修復了這些問題, 它只循環集合自己的元素code

函數部分:

1.函數若是沒有 return 語句, 函數執行完畢後也會返回結果, 只是結果爲 undefined
2.因爲 JavaScript 容許傳入任意個參數而不影響調用, 所以傳入的參數比定義的參數多也沒有問題, 雖然函數內部並不須要這些參數, 傳入的參數比定義的少也沒有問題
3.關鍵字 arguments 相似 Array 但它不是一個 Array
4.不在任何函數內定義的變量就具備全局做用域。 實際上, JavaScript 默認有一個全局對象 window。 以變量方式 var foo = function () {} 定義的函數實際上也是一個全局變量。
5.用 var that = this; , 你就能夠放心地在方法內部定義其餘函數,而不是把全部語句都堆到一個方法中。 對於普通函數調用, 一般把 this 綁定爲 null
6.apply()call()的惟一區別對象

  • apply() 把參數打包成 Array 再傳入;
  • call() 把參數按順序傳入。

7.全部實例的原型引用的是函數的 prototype 屬性
8.箭頭函數內部的 this 是詞法做用域( 寫代碼或者定義時肯定的 做用域,動態做用域是在運行時肯定 ),由上下文肯定。箭頭函數徹底修復了 this 的指向,this 老是指向詞法做用域繼承

標準對象

1.若是咱們在使用 NumberBooleanString 時, 沒有寫 newNumber()Boolean()String() 被當作普通函數,把任何類型的數據轉換爲 numberbooleanstring 類型(注意不是其包裝類型)

2.不要使用 new Number()new Boolean()new String() 建立包裝對象;

3.用 parseInt()parseFloat() 來轉換任意類型到 number

4.用 String() 來轉換任意類型到 string ,或者直接調用某個對象的 toString() 方法;

5.一般沒必要把任意類型轉換爲 boolean 再判斷,由於能夠直接寫 if (myVar) {...}

6.typeof 操做符能夠判斷出 numberbooleanstringfunctionundefined

7.判斷 Array 要使用 Array.isArray(arr)

8.判斷 null 請使用 myVar === null

9.判斷某個全局變量是否存在用 typeof window.myVar === 'undefined'

10.函數內部判斷某個變量是否存在用 typeof myVar === 'undefined'

11.任何對象都有 toString() 方法嗎? nullundefined 就沒有!

12.number 對象調用 toString()SyntaxError

相關文章
相關標籤/搜索