layout: post
title: javascript權威指南-第三章
date: 2017-08-31 14:23:12
tags: 讀書筆記
概述
這一章主要是講類型、值、變量。以前覺得大概都知道,但是靜下心來好好看,還是看到了很多以前理解錯誤的地方。
數據類型
js中的數據類型:分為基本類型和引用類型
string num boolean undefined null,引用類型就是指object這一個大的類別,包括function array等。
null可以理解為特殊的對象值。理解了這個,typeof返回什么之類的就很清晰了。
num
- Math.max(...args) 居然原生支持取出最大值/最小值的api
- Infinity 的概念。0/0 ,無窮大除以無窮大,或者強制轉不能轉成數字的操作都會返回NaN
- Infinity 和 NaN 都只是可讀的
- NaN和誰都不相等。判斷是不是NaN的方法 x != x.這個函數的作用和isNaN相識
- 實數有無數個,但是js只能表現有限的個數。That is to say,js中實數都是一個近似值。2進制的表示法表示不了0.1這樣的數字,所以 0.3-0.2 === 0.2-0.1返回false
string
string是基本的數據類型,任何操作都不會改變它,雖然可以操作數組一樣操作它。<a >注意區分slice、substring、substr的區別</a>
簡單來說,3個方法都可以截取字符串的一段,從開始位置到結束位置(不包括結束位置),區別體現在位置參數為負數的時候
bool值
涉及到一個強轉的問題。null undefined 0 -0 NaN '' 都會轉為false
null 和 undefined
null: 關鍵字。表示對象字符串num是無值的,也是一個對象,表示‘非對象’
undefined:不是關鍵字。表示變量沒有初始化
包裝對象
存取字符串數字bool的屬性的時候創建的對象,包裝對象和原始值不全等
這里還是有點坑的,只是不愿意去理解太多。
不可變和可變
一言以蔽之,基本類型都是不可變的,引用類型都是可變的。
let a = {a:1,b:2}
let b = a // b只是通過a拿到對象的引用,a,b指向的都是同一個內存空間
b.a = 3
a //也會改變
可以看下<a >對象拷貝簡單實現</a>
類型轉換
== 和 === 的區別在于==在比較之前做了一次類型轉換。
太多規則,記不住。以后再看
變量作用域
你不知道的js看了太多了。聲明提前的操作在代碼編譯階段,不是在執行階段。一個有意思的代碼塊
var scope = 'global'
function test(){
console.log(scope) // undefined,不是global,一定要注意,局部變量始終在函數體中有定義
var scope = 'local'
console.log(scope) // 'local'
}
總結
都是自己理解上不太準確的地方,或者說容易忘記的地方。記錄一下