JavaScript深入淺出補充——(一)數據類型,表達式和運算符
項目基本做完,在進行下一階段學習之前先看視頻學習回顧一下JavaScript
一、數據類型
JavaScript中有五種原始類型和一種對象類型
JavaScript弱類型語言中隱式轉換
num-0
字元串減去0,可以將字元串變數num轉化為數字
num+「」
數字變數串變數加上空字元串,可以將數字num轉化為字元串
等於==
當==兩邊是字元串和數字的時候會嘗試把字元串轉化為數字
嚴格等於===
兩邊類型不同返回false
兩邊相同:
需要注意NaN和任何東西比較都不等於,和自己也不等於,NaN≠NaN
JavaScript中的比較是用引用去比較,而不是用值去比較,所以new Object≠new Object,即使他們長度和內容完全相同也是不相等的,因為他們不是完全相等的對象,只有定義一個對象x,讓他和x去比較才是true,即使兩個空對象也不是true
包裝對象
首先我們定義一個字元串變數,然後定義一個變數對象,查看字元串,查看變數
嘗試訪問字元串的長度,給字元串加一個屬性,成功,訪問這個屬性,找不到
JavaScript中有一個隱藏機制,當把一個基本類型嘗試以對象的方式去使用它的時候,比如去訪問他的長度屬性,或者給他增加一些屬性,JavaScript會把這樣的基本類型轉化為對應的包裝類型對象,當完成這個訪問後,這個臨時對象會被銷毀
類型檢測
JavaScript中類型檢測的方法有很多,比如
最常見的typeof,會返回字元串,適合函數對象和基本類型
需要注意的是typeof null會返回object,這是由於某些歷史原因,因為曾經嘗試讓他返回null後造成了很多問題
typeof在判斷基本類型或者函數對象時非常方便,但是在其他一些情況就會沒有辦法了,比如我們要判斷一個對象是不是數組,用typeof會返回Object,對於判斷對象類型我們更常用的是instanceof
instanceof是基於原型鏈去操作的一個運算符
instanceof期望 左側是一個對象,如果不是對象,是基本類型會返回false,期望右側是一個函數對象或者說函數構造器,如果不是會拋出異常
instanceof的大概原理:判斷左操作數的對象的原型鏈上是否有右邊構造函數的prototype屬性
任何一個構造函數都會有一個prototype對象屬性,Javascript中對象的prototype屬性的解釋是:返回對象類型原型的引用。
instanceof 方法要求開發者明確地確認對象為某特定類型
實例:
1 //instanceof 示例
2 var oStringObject = new String("hello world");
3 console.log(oStringObject instanceof String); // 輸出 "true"
4 //這段代碼問的是「變數 oStringObject 是否為 String 對象的實例?」oStringObject 的確是 String 對象的實例,因此結果是"true"。儘管不像 typeof 方法那樣靈活,但是在 typeof 方法返回 "object" 的情況下,instanceof 方法還是很有用的。
5
6 //instanceof 常規用法
7 // 判斷 foo 是否是 Foo 類的實例
8 function Foo{}
9 var foo = new Foo;
10 console.log(foo instanceof Foo)//true
11
12 //instanceof 在繼承中關係中的用法
13 // 判斷 foo 是否是 Foo 類的實例 , 並且是否是其父類型的實例
14 function Aoo{}
15 function Foo{}
16 Foo.prototype = new Aoo;//JavaScript 原型繼承
17 var foo = new Foo;
18 console.log(foo instanceof Foo)//true
19 console.log(foo instanceof Aoo)//true
20
21 //instanceof 複雜用法
22 console.log(Object instanceof Object);//true
23 console.log(Function instanceof Function);//true
24 console.log(Number instanceof Number);//false
25 console.log(String instanceof String);//false
26
27 console.log(Function instanceof Object);//true
28
29 console.log(Foo instanceof Function);//true
30 console.log(Foo instanceof Foo);//false
補充:原型法
JavaScript中的方法可以分為三類:
a 類方法
b 對象方法
c 原型方法
調用Object.prototype.toString判斷類型
constructor
任何一個對象都有一個constructor屬性是繼承自原型的,constructor會指向構造這個對象的構造器或者說函數,constructor是可以被改寫的所以使用要小心
duck type(鴨子類型)
如果我們不知道這個對象是不是數組,我們判斷它的length是不是數字,是否有push這樣的,通過一些特徵來判斷是不是某些類型
注意:不能用typeof判斷某一個變數的值是不是null,可以使用嚴格等於===
二、表達式和運算符
JavaScript中的表達式
JavaScript中的運算符
條件運算符:
,運算符
從左到右計算表達式的值並取最右邊的
delete運算符
configurable為true才會被delete掉
in運算符
判斷x在window中返回true
instanceof,typeof
new運算符
比如我們創建一個空函數Foo
用new運算符可以創建一個新的對象obj
根據obj.x可以從函數的prototype屬性拿到1
可以通過hasOwnPropetry判斷是對象上的還是對象的原型的
用._proto_.拿到對象的原型發現x是對象原型上的屬性而不是對象本身的屬性
this運算符
void運算符
不管操作數是多少後會返回undefined
運算符優先順序
※mac下git配置和jenkins打包
※「HK」的日常之ARP斷網攻擊
※使用kuberspay無坑安裝生產級Kubernetes集群
※框架基礎:ajax設計方案(五)——集成promise規範,更優雅的書寫代碼
※日常API之百度翻譯
TAG:科技優家 |
※Adidas Sobakov 一款旨在表達足球圈熱情的街頭經典鞋 | Xsneaker
※lambda表達式foreach性能分析
※無法用言語表達的愛!The Void/IF I Were a cat/The Colour Monster
※Linux shell 邏輯運算符、邏輯表達式詳解
※Being in the World——淺談Olafur Eliasson作品在建築、景觀、及城市設計視角下的表達
※J Periodontol:振動增強hpdl細胞中PGE 2、IL-6和IL-8的表達
※Clin Exp Metastasis:HIF-1α增加Sema4D的表達和分泌,抑制肺癌骨轉移中的成骨
※Diabetes:新研究發現調節leptin表達的lncRNA
※Oncol Lett:miR-26a-5p表達增強能夠通過靶向PTEN促進膀胱癌的發展
※不要在Python中編寫 lambda 表達式了
※袁風嬌┃Lactobacillus plantarum苯丙酮酸還原酶的異源表達及其在苯乳酸製備中的應用
※Nature Communications:生化機制對異源表達基因的功能兼容性具有決定性作用
※Giambattista Valli利用蕾絲雪紡花朵元素表達優雅和柔美
※「衛生間」究竟怎麼表達?WC,Toilet or Restroom?
※Scala 正則表達式
※適合練習口語表達和聽力的荷蘭本土YouTube Channel
※People、person、human總是傻傻分不清?「人」的表達可太多了
※正則表達式和 Cookie使用
※專訪MIT教授Tomaso Poggio:表達、優化與泛化——數學視角里的深度學習
※又一個表達人類擔憂真相的辭彙出現了:Truth Decay