三、語言基礎(chǔ)

變量聲明(var const let)

var
  • 聲明范圍是 函數(shù)作用域,變量聲明會 “提升”,范圍內(nèi)重復(fù)變量的聲明會在代碼執(zhí)行的一開始被合并成一個聲明

    var a = 1;
    var a;
    console.log(a); // 1
    
  • 全局聲明時會成為window對象的屬性

  • for循環(huán)定義的迭代變量會滲透到循環(huán)外,引用始終為初始聲明的變量

let、const
  • 聲明范圍是 代碼塊,范圍內(nèi)無法重復(fù)聲明
  • 暫時性死區(qū):無聲明“提升”,聲明前引用會報錯(嚴(yán)格來講也會提升,但由于暫時性死區(qū),實際不能在聲明之前使用,因此從寫代碼角度來說,兩種提升不一樣)
  • for循環(huán)時,每次循環(huán)js引擎會在后臺為每個迭代聲明一個新的迭代變量
  • const聲明時必須初始化變量,且變量引用不可修改

數(shù)據(jù)類型

  • 六種基礎(chǔ)數(shù)據(jù)類型:String、Number、Boolean、Null、Undefined、Symbol
  • 一種復(fù)雜數(shù)據(jù)類型:Object
typeof 操作符
  • 用于判斷變量的數(shù)據(jù)類型
  • 返回值有:string、number、boolean、undefined、symbol、object、function
  • null 被認(rèn)為是空對象的引用,因此typeof null === 'object'
  • 函數(shù)嚴(yán)格來講也是 Object,但函數(shù)也有自己特殊的屬性,因此需要用typeof區(qū)分函數(shù)與一般Object
Undefined
  • 任何聲明未賦值的變量值都是undefined
  • undefined值主要用于比較及明確區(qū)分于null
Null
  • 建議用null來初始化對象變量,方便使用時判斷是否已經(jīng)重新賦值
  • undefined由null派生而來,因此 null == undefined
Boolean
  • falsy值:false,空字符串,0,NaN,undefin,null
Number
  • 轉(zhuǎn)換正整數(shù)優(yōu)先使用parseInt()parseInt() 更關(guān)注字符串是否含數(shù)值,Number()函數(shù)轉(zhuǎn)換字符串規(guī)則相對復(fù)雜且有點反常規(guī)
String
  • 轉(zhuǎn)換字符串優(yōu)先使用String(),String()會先嘗試調(diào)用入?yún)⒌?code>toString() 方法,由于null和undefined沒有toString()方法,String()方法會返回他們本身
Symbol
  • Symbol(符號) 實例是唯一且不可變更得的,用于是作為對象屬性的唯一標(biāo)識符,不會出現(xiàn)屬性沖突

  • 通過直接調(diào)用Symbol()函數(shù)創(chuàng)建Symbol實例(為了避免創(chuàng)建符號包裝對象,不支持new創(chuàng)建),可以傳入一個字符串作為符號描述,但這個字符串與符號的定義或標(biāo)識完全無關(guān)

    const symbolA1 = Symbol('a')
    const symbolA2 = Symbol('a')
    console.log(symbolA1 === symbolA2) // false
    
  • 需要復(fù)用符號時,可通過Symbol.for()在全局符號注冊表中創(chuàng)建或復(fù)用符號

    Symbol.for('foo') // 該方法調(diào)用時,若全局符號注冊表已存在該符號,則引用,否則新建
    const symbolA1 = Symbol.for('a')
    const symbolA2 = Symbol.for('a')
    console.log(symbolA1 === symbolA2) // true
    // 注意,Symbol()直接定義的符號并不在全局符號注冊表中
    const symbolA3 = Symbol('a')
    console.log(symbolA1 === symbolA3) // false
    
  • ES6中有一批內(nèi)置符號,它們以Symbol工廠函數(shù)字符串屬性的形式存在,例如for of 會在相關(guān)對象上使用Symbol.iterator 屬性,我們可以重新定義該屬性以改變默認(rèn)行為;

    在ECMAScript規(guī)范中,這類符號的名稱前綴為@@ , Symbol.iterator 等同于 @@iterator

Object
  • ECMAScript中其他類的基類,每個Object實例都有以下方法
    • constructor 構(gòu)造函數(shù) 用于創(chuàng)建對象實例
    • hasOwnProperty(propertyName)用于判斷屬性是否在實例上
    • isPrototypeOf(obj)判斷一個對象是否是另一個對象原型
    • toString 返回對象字符串表示
    • toLocaleString 返回對象本地化字符串表示
    • valueOf 返回對象字符串/數(shù)值/布爾值表示
    • propertyIsEnumerate(propertyName) 判斷給定的屬性是否可用(for - in) 枚舉

操作符

  • ++ -- + - 一元操作符都可以用于類型轉(zhuǎn)換,先轉(zhuǎn)換,后計數(shù)
  • 位操作符 ~ 非 ;& 與; | 或 ;<< 有符號左移; >> 有符號右移<<< 無符號左移; >>> 無符號右移
  • 布爾操作符 ! 非 && 與 || 或 注意短路運算
  • * 乘; / 除 有余數(shù);% 取模 只取余數(shù);
  • ** 指數(shù)運算 3 ** 2 === 9

語句

  • for in 遍歷對象的非Symbol鍵屬性
  • for of 遍歷可迭代對象的元素 (值)
  • break 退出循環(huán) 執(zhí)行循環(huán)后的語句
  • continue 退出本輪循環(huán) 從頂部開始執(zhí)行下一輪循環(huán)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ECMAScript作為核心,它規(guī)定了語言的組成部分:語法、類型、語句、關(guān)鍵字、保留字、操作符、全局對象。 1.語...
    辰天伊閱讀 460評論 0 0
  • 任何語言的核心所描述的都是這門語言在最基本的層面上如何工作,涉及語法、操作符、數(shù)據(jù)類型 以及內(nèi)置功能,在此基礎(chǔ)之上...
    sayhelloworld閱讀 280評論 0 1
  • JavaScript 用法 HTML 中的腳本必須位于 與 標(biāo)簽之間。腳本可被放置在 HTML 頁面的 ...
    蜂子fightting閱讀 868評論 0 0
  • 下面不屬于ECMAScript規(guī)范的范圍的是:( )A、 數(shù)據(jù)類型B、 語法C、 DOM事件D、 內(nèi)置對象和函數(shù)的...
    亓凡閱讀 3,138評論 3 9
  • 1.基本概念 定義: 運行在客戶端的一種腳本語言,不需要進行編譯。作用: 表單的動態(tài)檢測 服務(wù)器的開發(fā)(node....
    木小伍閱讀 320評論 0 0

友情鏈接更多精彩內(nèi)容