1.變量提升
參考這篇,變量聲明就是變量和函數聲明會被移到當前作用域作用域是肯定要重點看的,高級設計這本書里我記得講的比較詳細,我就不找那種整理的文章了,等看到了再一步步把他弄透
的最頂部,然后只在編譯時執行變量和函數聲明,并不會執行賦值,其實上面那個鏈接里看幾個例子就懂了,然后 let 和 const 不存在變量提升現象。
舉個例子:
a = 9;
var a;
console.log(a);
這段代碼會在編譯時先執行 var a
,然后在運行時執行賦值 a=9
,所以結果是會打印出 9
。還有個細節就是函數會由于變量,后出現的函數聲明會覆蓋之前的。
2.var let 區別
參考這篇:
var 存在變量提升,let 和 const 不存在變量提升,其實第一點就是看這個之后詳細去看的。
let聲明的全局變量不是全局對象的屬性。這就意味著,你不可 以通過
window.變量名
的方式訪問這些變量。用let重定義變量會拋出一個語法錯誤(SyntaxError)。
-
總之,let 是更完美的 var,以后盡量只用 let,不用 var。
順便說下 const 吧,const 其實相當于 Java 中的用final 定義常量,但 js 中的 const 必須定義的同時賦值,否則會報錯。
3.聲明一個全局變量(不推薦使用,僅了解)
雖然上面說了盡量用 let,但現在看的這本書里用的還是 var,所以我記錄的還是 var,自己心里清楚就行了。
var 的作用域是函數內,let 是代碼塊內,但我們可以通過省略 var 操作符來聲明一個全局變量。
function test(){
message = "hi"; // 全局變量
}
test();
alert(message); // "hi"
4.數據類型
- 簡單/基本數據類型(5種)
- Undefined,只有一個值
undefined
- Null,只有一個值
null
- Boolean
- Number
- String
- Undefined,只有一個值
- 復雜數據類型(1種)
- Object
檢測數據類型的方法:typeof
let message = "some string";
alert(typeof message); // string
alert(typeof(message)); // string
alert(typeof "message");// string
alert(typeof 95); // number
true/false
數據類型 | true | false |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零數字值 | 0和 NaN |
Object | 任何對象 | null |
Undefined | 不適用 | undefined |
NaN
Not a Number
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("10")); //false 被轉換成數值10
alert(isNaN("blue")); //true 不能被轉換成數值
alert(isNaN(true)); //true 被轉換成數值1
Object 實例都具有的方法和屬性
這部分記下來主要是為了方便以后調試或者找 bug 的時候
constructor
: 構造函數hasOwnProperty(propertyName)
: 檢測給定的屬性在當前對象實例中是否存在。eg:o.hasOwnProperty("name")
isPrototypeOf(Object)
: 用于檢測傳入的對象是否是當前對象的原型也是比較重要的東西,后面詳細整理
propertyIsEnumerable(propertyName)
: 用于檢測給定的屬性能否使用for-in
語句來枚舉-
toLocaleString()
: 返回對象是字符串表示,該字符串與執行環境的地區對應new Date().toLocaleString() // "2018/5/5 下午12:48:03" 像樣的時間 [999,99,9,888,88,8,'a', 'z'].toLocaleString() // "999,99,9,888,88,8,a,z" 就是Arr.join(',') 2039475923.123.toLocaleString() // "2,039,475,923.123" Num加個千分位
toLocaleString設計初衷應該是給開發者提供‘同一邏輯,世界各地都能看懂’的方法,調用時如果不傳參,會默認宿主環境語言來返回結果,也可以用html標簽的lang指定語言,這樣執行時就默認用的lang
toString()
: 返回對象的字符串表示valueOf()
: 返回對象的字符串、數值或布爾值表示