早期整理的js知識點

I javascript數據類型

一、六種數據類型

五種基本類型(原始類型):

  1. Number
  2. String
  3. Boolean
  4. Null
  5. Undefined

一種對象類型

  • Object(Function,Array,Date...)

二、隱式轉換

巧用‘+’ 和 ‘-’隱式轉換規則

  • 最常用且容易疑惑的是加法運算,除了算數意義,還表示字符串拼接:
    var a = 'The answer is ' + 47;//The answer is 47
    '37' + 7 = 377
    '37' - 7 = 30 //把字符串轉換成數值類型

'=='等于,類型不同時,嘗試類型轉換和比較

  • ‘1.23’ == 1.23 //string轉number
  • 0 == false// boolean轉number
  • null == undefined
  • new Object() == new Object()
  • [1,2] == [1,2]
  • object == number | string //嘗試對象轉為基本類型
  • 其他false

'==='全等于

  • 類型不同,返回false
  • 類型相同
    NaN != NaN
    new Object == new Object
    null === null
    undefined ===undefined

三、包裝對象

臨時性的對象,用完即時刪除,設置屬性時訪問不到。


基本類型的包裝對象
基本類型的包裝對象

四、類型檢測

常用類型檢測方法:

  1. typeof:適用于檢測基本類型


    typeof
    typeof
  2. instanceof:適用于檢測對象的類型,值得注意到是,不同window或iframe間的對象類型檢測不能用instanceof


    instanceof
    instanceof
  3. Object.prototype.toString:


    Object.prototype.toString
    Object.prototype.toString

類型檢測小結:

II javascript表達式和運算符

1.表達式

表達式是指能計算出值的任何可用程序單元 --Wiki
表達式是一種js短語,可以使js解釋器用來產生一個值。--《Js權威指南》

1.1 原始表達式

  • 常量,直接量:3.14,“test”
  • 關鍵字:null,this,true
  • 變量:i,j,k

1.2 數組,對象的初始化表達式

  • [1,2]
    new Array(1,2)
  • [1,,,4]
    [1,undefined,undefined,4]
  • {x:1,y:2}
    var o =new Object();o.x=1;o.y=2;

1.3 函數表達式

  • var fe = function(){};
  • (function(){console.log("hello world!");})();
  • function add(){};

1.4 屬性訪問表達式

  • var o = {x:1}
    o.x
    o['x']

1.5 調用表達式

  • funcName()

1.6 對象創建表達式

  • new Func(1,2);
  • new Object;

2.運算符

2.1 常用運算符

常用運算符
常用運算符

2.2 特殊運算符

特殊運算符
特殊運算符

2.3 運算優先級

運算優先級
運算優先級

III javascript語句和嚴格模式

1.語句(statement)

  • block,break,continue,empty,if...else,switch,try catch
  • var,function,return,do...while,for,for..in,while
  • debugger,label,with

2.塊(block)

快語句常用于組合0~多個語句。塊語句用一對{}定義,但是沒有塊級作用域,有函數作用域

有函數作用域


有函數作用域
有函數作用域

沒有塊級作用域


沒有塊級作用域
沒有塊級作用域

3.嚴格模式(use strict)

嚴格模式是一種特殊的執行模式,它修復了部分語言上的不足,提供更強的錯誤檢查,并增強安全性。


嚴格模式
嚴格模式

IV javascript對象

1.概述

對象中包含一系列屬性,這些屬性使無序的。每個屬性都有一個字符串key和對應的value:
var obj = {x:1,y:2};
obj.x = 1;
obj.y = 2;

2.對象的結構

2.1 結構圖解:

對象obj是函數foo的一個實例(var obj = new foo()),而函數foo的原型上定義了一個屬性z(foo.prototype.z = 3),對象obj除了自身的x,y屬性外,還繼承了z屬性,那是因為對象obj內部的[[prototype]]屬性(指針)指向函數foo的原型,在查找對象屬性時查找到了z屬性。之外它還擁有[[class]],[[extensible]]等對象標簽和writable,enumerable等屬性標簽。


對象的結構
對象的結構

2.2 對象創建

  1. 對象字面量
    var obj1 = {x:1,y:2}
    var obj2 = {
    x:1,
    y:2,
    o:{
    z:3,
    n:4
          }
    };
  1. new Object
    new Object
    new Object

    new Object2
    new Object2
  2. Object.create


    Object.create
    Object.create

2.3 屬性操作

  1. 屬性讀寫


    屬性讀寫
    屬性讀寫
  1. 屬性刪除


    屬性刪除
    屬性刪除
  2. 屬性檢測
    屬性檢測
    屬性檢測

    屬性檢測
    屬性檢測
  3. 屬性枚舉


    屬性枚舉
    屬性枚舉

3.getter setter

3.1 get/set 關鍵字定義方法

3.2 一些復雜的應用,檢測輸入是否合法

3.3 get/set與原型鏈的關系

當嘗試去修改位于原型上的屬性時,如果是一般屬性,則可以在對象內部創建新值以修改。如果要修改的屬性含有get關鍵字,那么就不能修改。要想嘗試去修改的話,可以調用Object的定義屬性方法。



同樣的,如果嘗試修改原型上的屬性是只讀的(writable=false,默認是false),也不能直接修改。還是要用Object.defineProperty()方法去修改。


4.屬性標簽

4.1 定義屬性

方法getOwnPropertyDescripor(對象,’屬性名‘)(標簽屬性訪問器)用于獲取屬性的標簽。該方法以鍵值對形式返回一個對象。
方法defineProperty(對象,‘屬性’,{標簽:值})自定義屬性的配置信息。



方法keys(對象)枚舉對象上的屬性,對于設置了不可枚舉(enumerable:false)的屬性不枚舉出來。


4.2 定義多個屬性

方法defineProperties(對象,{
屬性1:{value:"",標簽:值},
屬性2:{value:"",標簽:值}
})定義多個屬性。



結合get/set方法定義屬性



屬性權限對照表

5.對象標簽

5.1對象原型標簽指向對應的原型(原型鏈的形成)

5.2 表示對象的類別(屬于哪類引用類型)

5.3 擴展性標簽(對標簽進行修改)

6.序列化和其它對象方法

6.1把對象序列化為JSON數據和解析json數據

值為undefined的屬性序列化時不顯示,值為NaN或Infinity的屬性會轉換成null,new Date()會被轉換為UTC。


6.2自定義序列化方法toJSON:function(){}

6.3 其它對象方法

V javascript數組(Array)

1 創建數組、數組操作

  1. js中數組是弱類型的,數組中的每一項可以保存任何類型的數據
    var arr = [1,true,null,undefined,{x:1},[1,2.3]];
  • js中數組的大小是動態可調整的,可以隨著數據的添加自動增長
    var arr = [1,2,3,4,5];
    arr[5] = 6; // 增加第5項
    arr.length //6 自動增長,也可以動態修改
    arr[2]; //3 訪問數組第2項
  • 創建數組-使用Array構造函數
    var arr = new Array();
    var arr = new Array(20); //如果是數值,指定長度;如果是其它類型,則創建包含這個值的只有一項的數組
    var arr = new Array(“red”,“blue”,“orange”,“black”); //指定元素
    var arr = Array(); //可以省略new關鍵字
  • 創建數組-數組字面量表示法(不會調用Array構造函數)
    var arr = [1,2,3,4];
    var arr = []; //空數組
  • 檢測數組
    if(Array.isArray( 要檢測的數組 )){//對數組執行操作}
  • 轉換方法
    var arr = ['a','b','c'];
    arr.toString(); //拼接成一個以逗號分隔的字符串 a,b,c
    arr.valueOf(); //返回原數組
    alert(arr); //同toString(),會在后臺調用toString()方法
    arr.join(','); //a,b,c
    arr.join('|'); //a|b|c
    如果數組中的某一項的值是null或undefined,該值在join(),toString(),toLocaleString()和valueOf()方法的返回結果中以空字符串顯示

2 數組方法

  1. 棧方法(后進先出-向后推入push(),末尾取出pop())
    var arr = new Array();
    arr.push('NBA','AT&T'); // 推入2項
    arr.pop(); // 取得最后一項 'AT&T'
  1. 隊列方法(先進先出-向前推入unshift(),前端取出shift())
    var arr =new Array(1,2,3);
    arr.unshift('num'); //在前端添加一項
    arr.shift(); //取得第一項
  2. 重排序方法(升序排序sort(),反轉排序reverse())
    sort() 方法會調用每個數組項的toString()轉型方法,比較的是字符串。所以不是最佳方案
    創建比較函數:
    function compare1(v1,v2) {
    if (v1 < v2) {
    return -1;
    }else if (v1 > v2) {
    return 1;
    }else{
    return 0;
    }
    };
    //對于數值類型的比較方法
    function compare2(v1,v2) {
    return v2 - v1;
    };
    var arr = [0,1,10,5];
    arr.sort(compare1);//會得到正確的數值排序0,1,5,10
  3. 數組迭代


  4. 二維數組


  5. Array.prototype.concat()


  6. Array.prototype.slice()


  7. Array.prototype.splice()


  8. Array.prototype.forEach()


  9. Array.prototype.map()


  10. Array.prototype.filter()


  11. Array.prototype.every&some()


  12. Array.prototype.reduce&reduceRight()


  13. Array.prototype.indexOf&lastIndexOf()


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容