JS易用常用知識點攢集(陸續(xù)更新)

  • 1. 如何正確獲取Javascript對象的類屬性呢?---toString()

由于JS中很多對象繼承toString()被重寫了,為了能正確調(diào)用toString()版本,必須間接調(diào)用Function.call()方法

    function classOf(o){
        if(o === null)  return 'Null';
        if(o === undefined) return 'Undefined';
        return Object.prototype.toString.call(o).slice(8,-1);
    }

測試一下:

    classOf({}); //==>"Object"
    classOf(''); //==>"String"
    classOf(2); //==>"Number"
    classOf([]); //==>"Array"
    classOf(null); //==>"Null"
    classOf(/./); //==>"Regexp"
    classOf(new Date()); //==>"Date"
    classOf(false) //==>"Boolean"
  • 2. JS中可被判定為false的6種情況

js必須牢記的6個蛋蛋: 請你一定要記住:在js邏輯運算中,0、""(空字符)、null、false、undefined、NaN都會判為false,其他都為true,這個一定要記住,不然應(yīng)用 || 和 && 就會出現(xiàn)問題。

  • 3. ' !! ' 作用與用法
var a;
var b=!!a;

a默認是undefined。!a是true,!!a則是false,所以b的值是false,而不再是undefined,也非其它值,主要是為后續(xù)判斷提供便利。
!!的作用是把一個其他類型的變量轉(zhuǎn)成的bool類型。

  • 4. 變量提升-- 關(guān)鍵字var、let
var a = {b:a}  //=>由于var變量提升,在對a進行打印的時候 {b:undefined}
let a = {b:a} //=>let關(guān)鍵字不會造成變量提升,在這樣去定義a變量的時候會報錯 a is not defined
  • 5.在js中綁定onclick事件為什么不加括號,在html代碼中必須要加?

加上括號是執(zhí)行的意思,添加事件的回調(diào)函數(shù)應(yīng)該就是給相應(yīng)的事件屬性賦值,而很明顯需要把一個函數(shù)賦值給這個事件屬性,而不是函數(shù)的調(diào)用結(jié)果。所以在js中的綁定是直接賦值。
而在標簽內(nèi)的事件屬性的值是由引號包裹的,代表的是當點擊該元素時,執(zhí)行引號內(nèi)的代碼,直接把引號內(nèi)的代碼拿出來跑,如果你不加括號,那就不會調(diào)用那個函數(shù)。

<a herf="javascript:;" onclick="fn" /> //=> ? fn(){console.log('test')}
<a herf="javascript:;" onclick="fn()" /> //=> test

funciton fn(){
  console.log('test')
}

這兩個標簽執(zhí)行時相當于在相應(yīng)的事件里執(zhí)行eval("..."),第一個標簽點擊時等價于eval("fn"),輸出函數(shù)fn的函數(shù)體? fn(){console.log('test')},也就是說用戶點擊時并沒有得到想要的結(jié)果;第二個標簽點擊時等價于eval("fn()"),輸出test,可以得到目的結(jié)果,所以在html標簽上的事件屬性的值如果是要調(diào)用function就一定要加()來保證點擊后可以得到目的結(jié)果。

  • 6.在js中~~~!!|=|&<<>>>>>的含義以及用法?

~ 按位取反運算符

表達式 二進制值 結(jié)果
5 0000 0101 5
~5 1111 1010 -6

換算的過程如下:

步驟 數(shù)值 描述
0000 0101
按位取反 1111 1010 發(fā)現(xiàn)最高位是1,代表符號-負數(shù)
除符號位外按位取反 1000 0101
末位加1求其補碼 +?????????????1
結(jié)果 1000 0110 轉(zhuǎn)換成十進制為-6
  • 7.JSON.parse()與JSONstringfy()詳細用法
    JSON對象包含兩個方法: 用于解析 JavaScript Object Notation (JSON) 的 parse() 方法,以及將對象/值轉(zhuǎn)換為 JSON字符串的 stringify() 方法。除了這兩個方法, JSON這個對象本身并沒有其他作用,也不能被調(diào)用或者作為構(gòu)造函數(shù)調(diào)用,具體參考 JSON
    JSON中嚴格是要使用雙引號"" 而不是單引號''

    先看MDN上的JSON.parse()說明:
    JSON.parse() 方法用來解析JSON字符串,構(gòu)造由字符串描述的JavaScript 值或?qū)ο蟆L峁┛蛇x的reviver函數(shù)用以在返回之前對所得到的對象執(zhí)行變換。

    JSON.parse(text[, reviver])

    參數(shù)

    text
    要被解析成JavaScript值的字符串。

    reviver(可選)
    轉(zhuǎn)換器, 如果傳入該參數(shù)(函數(shù)),可以用來修改解析生成的原始值,調(diào)用時機在 parse函數(shù)返回之前。

    返回值

    Object類型, 對應(yīng)給定JSON文本的對象/值
    使用示例:

    JSON.parse('{}');              // {}
    JSON.parse('true');            // true
    JSON.parse('"foo"');           // "foo"
    JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
    JSON.parse('null');            // null
    JSON.parse('1');               //  1
    

    以上的示例都是JSON.parse()適用的類型。

    下面再看一下JSON.stringfy()方法:
    JSON.stringify()方法是將一個JavaScript值(對象或者數(shù)組)轉(zhuǎn)換為一個 JSON 字符串,如果指定了replacer是一個函數(shù),則可以替換值,或者如果指定了replacer是一個數(shù)組,可選的僅包括指定的屬性。

    JSON.stringify(value[, replacer [, space]])

    參數(shù)

    value
    將要序列化成 一個JSON 字符串的值。

    replacer(可選)
    如果該參數(shù)是一個函數(shù),則在序列化過程中,被序列化的值的每個屬性都會經(jīng)過該函數(shù)的轉(zhuǎn)換和處理;如果該參數(shù)是一個數(shù)組,則只有包含在這個數(shù)組中的屬性名才會被序列化到最終的 JSON 字符串中;如果該參數(shù)為null或者未提供,則對象所有的屬性都會被序列化;關(guān)于該參數(shù)更詳細的解釋和示例,請參考使用原生的 JSON 對象一文。

    space(可選)
    指定縮進用的空白字符串,用于美化輸出(pretty-print);如果參數(shù)是個數(shù)字,它代表有多少的空格;上限為10。該值若小于1,則意味著沒有空格;如果該參數(shù)為字符串(字符串的前十個字母),該字符串將被作為空格;如果該參數(shù)沒有提供(或者為null)將沒有空格。

    返回值

    一個表示給定值的JSON字符串。

    JSON.stringify({});                        // '{}'
    JSON.stringify(true);                      // 'true'
    JSON.stringify("foo");                     // '"foo"'
    JSON.stringify([1, "false", false]);       // '[1,"false",false]'
    JSON.stringify({ x: 5 });                  // '{"x":5}'
    

    chrome開發(fā)者模式執(zhí)行結(jié)果如下:


    可以看到黑色雙引號內(nèi)的內(nèi)容與我們轉(zhuǎn)進行stringfy之前的是一樣的。
    我們從這兩個方法看出來parse方法需要的是單引號,stringfy執(zhí)行后是雙引號,如果將執(zhí)行結(jié)果復(fù)制再用parse方法執(zhí)行就會報錯,如果用stringfy執(zhí)行后結(jié)果賦值給變量,再將這個變量用parse方法轉(zhuǎn)換就會得到預(yù)期結(jié)果。

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

推薦閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,189評論 0 13
  • 官方中文版原文鏈接 感謝社區(qū)中各位的大力支持,譯者再次奉上一點點福利:阿里云產(chǎn)品券,享受所有官網(wǎng)優(yōu)惠,并抽取幸運大...
    HetfieldJoe閱讀 2,546評論 1 17
  • 什么是 JavaScript 語言? JavaScript 是一種輕量級的腳本語言。所謂“腳本語言”(script...
    oWSQo閱讀 1,804評論 0 1
  • 好像明天可以不用上班了,最近流血的鼻子也不知道從哪一天起就好了,可以基本判斷是天氣干燥引起的毛細血管破裂,而不是身...
    吳佟閱讀 156評論 0 0
  • 一個小小的人,有一顆小小的心,心外有一圈窄窄的圍墻。心一天天長大,我的世界一點點變得復(fù)雜,圍墻越圍越寬,越圍越大...
    7234f6d760d3閱讀 214評論 1 2