JavaScript 筆記01(變量提升、數據類型)

1.變量提升

參考這篇,變量聲明就是變量和函數聲明會被移到當前作用域作用域是肯定要重點看的,高級設計這本書里我記得講的比較詳細,我就不找那種整理的文章了,等看到了再一步步把他弄透的最頂部,然后只在編譯時執行變量和函數聲明,并不會執行賦值,其實上面那個鏈接里看幾個例子就懂了,然后 let 和 const 不存在變量提升現象。

舉個例子:

a = 9;
var a;
console.log(a);

這段代碼會在編譯時先執行 var a,然后在運行時執行賦值 a=9,所以結果是會打印出 9。還有個細節就是函數會由于變量,后出現的函數聲明會覆蓋之前的。


2.var let 區別

參考這篇:

  1. var 存在變量提升,let 和 const 不存在變量提升,其實第一點就是看這個之后詳細去看的。

  2. let聲明的全局變量不是全局對象的屬性。這就意味著,你不可 以通過window.變量名的方式訪問這些變量。

  3. 用let重定義變量會拋出一個語法錯誤(SyntaxError)。

  4. 總之,let 是更完美的 var,以后盡量只用 let,不用 var。

    順便說下 const 吧,const 其實相當于 Java 中的用final 定義常量,但 js 中的 const 必須定義的同時賦值,否則會報錯。


3.聲明一個全局變量(不推薦使用,僅了解)

雖然上面說了盡量用 let,但現在看的這本書里用的還是 var,所以我記錄的還是 var,自己心里清楚就行了。

var 的作用域是函數內,let 是代碼塊內,但我們可以通過省略 var 操作符來聲明一個全局變量。

function test(){
    message = "hi"; // 全局變量
}
test();
alert(message); // "hi"

4.數據類型

  • 簡單/基本數據類型(5種)
    • Undefined,只有一個值 undefined
    • Null,只有一個值null
    • Boolean
    • Number
    • String
  • 復雜數據類型(1種)
    • Object

檢測數據類型的方法:typeof

let message = "some string";
alert(typeof message);  // string
alert(typeof(message)); // string
alert(typeof "message");// string
alert(typeof 95);       // number

true/false

數據類型 true false
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非零數字值 0和 NaN
Object 任何對象 null
Undefined 不適用 undefined

NaN

Not a Number

alert(isNaN(NaN));     //true
alert(isNaN(10));      //false
alert(isNaN("10"));    //false 被轉換成數值10
alert(isNaN("blue"));  //true 不能被轉換成數值
alert(isNaN(true));    //true 被轉換成數值1

Object 實例都具有的方法和屬性

這部分記下來主要是為了方便以后調試或者找 bug 的時候

  1. constructor: 構造函數

  2. hasOwnProperty(propertyName): 檢測給定的屬性在當前對象實例中是否存在。eg:o.hasOwnProperty("name")

  3. isPrototypeOf(Object): 用于檢測傳入的對象是否是當前對象的原型也是比較重要的東西,后面詳細整理

  4. propertyIsEnumerable(propertyName): 用于檢測給定的屬性能否使用for-in語句來枚舉

  5. toLocaleString(): 返回對象是字符串表示,該字符串與執行環境的地區對應

    new Date().toLocaleString()
     // "2018/5/5 下午12:48:03" 像樣的時間
    [999,99,9,888,88,8,'a', 'z'].toLocaleString()
     // "999,99,9,888,88,8,a,z" 就是Arr.join(',')
    2039475923.123.toLocaleString()
     // "2,039,475,923.123" Num加個千分位
    

    toLocaleString設計初衷應該是給開發者提供‘同一邏輯,世界各地都能看懂’的方法,調用時如果不傳參,會默認宿主環境語言來返回結果,也可以用html標簽的lang指定語言,這樣執行時就默認用的lang

  6. toString(): 返回對象的字符串表示

  7. valueOf(): 返回對象的字符串、數值或布爾值表示

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

推薦閱讀更多精彩內容