Hello,大家好,好久沒有更新博客了,博主這幾天在幹嘛呢?博主在惡補看書學習中,本來準備每天都更新一篇博客,但發現博客必須得是精華才行,大家才願意看,都是流水賬式的文章,大家看的也累。除非每天都有新的內容、新的思路這樣每天都寫博客纔有意義。
廢話不說了,開始我的表演了。
該系列讀書筆記將持續更新,更新完畢後再出一個精華版總結,方便查閱
首先來看看一張圖,關於前端需要看的書籍:
相對於Html與Css來說,Javascript要看的書籍真是太多了,但我還是覺得Html與Css比較難。
今天要做讀書筆記是來自書籍《javascript高級程序設計》,在我尋找javascript參考書教材的時候,很多人都推薦了這一本書,號稱是讀十遍之後肯定能進BAT。書是好書,但是看完之後能不能進BAT就看自己的能力了,要進BAT基礎必須得好,而且也不單單是考察javascript的知識內容。總而言之,這本書推薦給大家。
開始正式內容:
- Javascript有五種基本數據類型:null,undefined,Boolean,Number,String
- 利用typeof來判斷變量的數據類型,比較特殊的是typeof null的結果是object。可以認爲null是指向空對象的引用,所以null的類型爲object。用typeof判斷數據類型時,返回的是字符串,例如 typeof “hello“,它輸出的結果是“String”,記住有雙引號
- NaN是指Not a number,常用來判斷是否爲數字
- parseInt(“字符串”,”進制”),檢索字符串會忽略前面的空格,直到找到第一個非空字符
- parseInt會對空字符串輸出NaN,Number會對空字符串輸出0,parseFloat會對空字符串輸出NaN
- ojbect常規屬性包含constructor()、hasOwnProperty(“string format property”)、propertyIsEnumerable(“string format property”)、toLocaleString()、toString()、valueOf()。後面兩個是返回對象的字符串。
- 位操作符包括NOT(~)、AND(&)、OR(|)、XOR(^)、左移(<<)、右移有符號(>>)、右移無符號(>>>)
- 邏輯與操作符屬於短路操作,如果第一個操作對象返回false,則停止對後面的操作對象進行求值
- 函數的參數不是必須的,不定義參數,也可以用arguments[]來獲取輸入的參數
- 修改arguments[]中的值會同步到對應的命名參數。arguments的長度由傳入參數的個數決定,取長度用length
- 參數傳遞都是值傳遞,不會是通過引用傳遞
- javascript不是標準的面嚮對象語言,它沒有重載,但是可以通過判斷輸入參數的數據類型(typeof parameters)和參數的個數來進入不同的分支,模擬重載
- 作用域鏈是從 當前執行代碼所在的環境對象=>外部環境對象=>全局環境變量對象。全局環境是最末端執行環境。
- 作用域可以向上搜索變量,但不能向下搜索
- 沒有塊級作用域,這是與c、c++或java不同的地方,會是面試的考點
- 使用var聲明的變量會自動被添加到最接近的環境中
- 垃圾回收策略一般不用引用計數策略,這樣存在性能問題,例如循環引用的時候就會永遠清除不了垃圾
- 基本類型保存在棧裏(heap),引用類型保存在堆裏(stack)
- 基本類型變量拷貝是創建值的副本;引用類型變量拷貝是複製指針,因此引用類型拷貝出來的兩個變量始終指向同一個對象
- 可以用對象字面量來創建函數,創建函數時屬性名可以是字符串。例如 var obj = {“name”:”test”,age:18};在這個例子裏name就是用字符串形式來表達屬性名,age就沒有用字符串形式,兩個方法都可以創建屬性
- var person = { } 、var person = new Object()、 var person = new Object。這三個方法都是等價的
- var person = {};person.name = “Test”。這是點表示法
- var person = {};person[“name”] = “Test”。這是方括號表示法
- 點表示法不能通過變量形式來表達屬性,但是方括號法可以。
var person = {};
var propertyName = “name”;
person[propertyName] = “Test”;
由此可知,方括號法裏的屬性要用字符串形式表達,如果不用字符串可被處理爲一個變量,這裏要分辨清楚 - 數組不同點在於每一項都可以保存任何類型的數據
- 創建數組的方法:
var arr = new Array();
var arr = new Array(20);
var arr = new Arrary(“red”,”blue”)
與c語言不同的地方在於,c創建數組的方式爲 int arr[] = {1,2,3,4}
可省略new操作符
var arr = [];
var arr = [1,2,]; 不要這樣,在最後寫逗號
var arr = [,,,,,]; 也不要這樣
var arr = [“red” , “blue”]; - 數組的length不是可讀的,可修改。可利用這個特性,動態修改數組長度,可方便的在數組末尾添加新項
- 檢測數組的方式
if(value instanceof Array){}
if(Array.isArray(value)) 推薦