當前位置:
首頁 > 知識 > JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

項目基本做完,在進行下一階段學習之前先看視頻學習回顧一下JavaScript

一、數據類型

JavaScript中有五種原始類型和一種對象類型

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript弱類型語言中隱式轉換

num-0

字元串減去0,可以將字元串變數num轉化為數字

num+「」

數字變數串變數加上空字元串,可以將數字num轉化為字元串

等於==

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

當==兩邊是字元串和數字的時候會嘗試把字元串轉化為數字

嚴格等於===

兩邊類型不同返回false

兩邊相同:

需要注意NaN和任何東西比較都不等於,和自己也不等於,NaN≠NaN

JavaScript中的比較是用引用去比較,而不是用值去比較,所以new Object≠new Object,即使他們長度和內容完全相同也是不相等的,因為他們不是完全相等的對象,只有定義一個對象x,讓他和x去比較才是true,即使兩個空對象也不是true

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

包裝對象

首先我們定義一個字元串變數,然後定義一個變數對象,查看字元串,查看變數

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

嘗試訪問字元串的長度,給字元串加一個屬性,成功,訪問這個屬性,找不到

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript中有一個隱藏機制,當把一個基本類型嘗試以對象的方式去使用它的時候,比如去訪問他的長度屬性,或者給他增加一些屬性,JavaScript會把這樣的基本類型轉化為對應的包裝類型對象,當完成這個訪問後,這個臨時對象會被銷毀

類型檢測

JavaScript中類型檢測的方法有很多,比如

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

最常見的typeof,會返回字元串,適合函數對象和基本類型

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

需要注意的是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深入淺出補充——(一)數據類型,表達式和運算符

補充:原型法

JavaScript中的方法可以分為三類:

a 類方法

b 對象方法

c 原型方法

調用Object.prototype.toString判斷類型

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

constructor

任何一個對象都有一個constructor屬性是繼承自原型的,constructor會指向構造這個對象的構造器或者說函數,constructor是可以被改寫的所以使用要小心

duck type(鴨子類型)

如果我們不知道這個對象是不是數組,我們判斷它的length是不是數字,是否有push這樣的,通過一些特徵來判斷是不是某些類型

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

注意:不能用typeof判斷某一個變數的值是不是null,可以使用嚴格等於===

二、表達式和運算符

JavaScript中的表達式

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

JavaScript中的運算符

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

條件運算符:

,運算符

從左到右計算表達式的值並取最右邊的

delete運算符

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

configurable為true才會被delete掉

in運算符

判斷x在window中返回true

instanceof,typeof

new運算符

比如我們創建一個空函數Foo

用new運算符可以創建一個新的對象obj

根據obj.x可以從函數的prototype屬性拿到1

可以通過hasOwnPropetry判斷是對象上的還是對象的原型的

用._proto_.拿到對象的原型發現x是對象原型上的屬性而不是對象本身的屬性

this運算符

void運算符

不管操作數是多少後會返回undefined

運算符優先順序

JavaScript深入淺出補充——(一)數據類型,表達式和運算符

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 科技優家 的精彩文章:

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