日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript 表达式和运算符 (二)

發布時間:2023/12/20 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript 表达式和运算符 (二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

表達式是一種JS短語,可使JS解釋器用來產生一個

一、表達式

表達式分類

1、原始表達式

常量、直接量 (3.14,"test");

關鍵字 (null,this,true);

變量(i,k,j);

都屬于原始表達式。

原始表達式和原始表達式可以復合成復合表達式,比如10*20;

2、初始化表達式

?數組、對象的初始化表達式

比如[1,2] 相當于new Array(1,2);

[1,,,4] 相當于[1,undefined,undefined,4]

{x:1,y:2}相當于 var o=new Object();o.x=1;o.y=2;

3、函數表達式

把函數賦值給一個變量:var fe=function(){};

把函數括起來直接調用:(function(){console.log('hello world');})();

4、屬性訪問表達式

?var o={x:1};

o.x或者o['x']訪問對象的屬性叫屬性訪問表達式

5、調用表達式

?函數名加上括號func()就是調用表達式。

6、對象創建表達式

new Func(1,2);

沒有參數可以把括號直接省略new Object,表示創建一個空對象。

二、運算符

分類,安裝操作數個數分類:

?

按功能分類:

展開介紹特殊運算符。

1、?:條件運算符

var val=true?1:2;???? //val值為1

2、,逗號運算符

很少見。

var val=(1,2,3);??? //val值為3

逗號表達式會從左到右依次計算表達式的值,最后會取最右邊的值

用逗號隔開表示每個表達式都會被計算,最終整個表達式的結果會取最右邊的。

3、delete運算符【update20170506】

用來刪除對象上的屬性,比如delete obj.x;

IE9開始有一個Object.defineProperty()方法可以設置一個configurable標簽,并不是對象上的所有屬性都可以被成功delete掉,configurable為true才能正常被delete。

delete運算符不能刪除變量,不能刪除參數用來刪除對象上configurable為true的屬性

用var 聲明的變量,掛在變量對象上,不能用delete刪除 隱式聲明的變量,相當于是Global對象的屬性,可以用delete 刪除

4、in運算符

判斷對象里是否有key

in運算符要求第1個(左邊的)操作數必須是字符串類型或可以轉換為字符串類型的其他類型,而第2個(右邊的)操作數必須是數組或對象。

5、instanceof,typeof運算符

new Object() instanceof Object //true typeof 100 === 'number' //true

instanceof基于原型鏈判斷對象的類型

typeof返回字符串,用于原始類型或者函數。

6、new運算符

new創建構造器的一個實例。

7、this運算符

this在不同情況有不同值

8、void運算符

void是一元運算符,不管后面操作數是多少都會返回undefined.

9、運算符優先級

下面的表將所有運算符按照優先級的不同從高到低排列。參考MDN。

優先級運算類型關聯性運算符
19圓括號n/a( … )
18成員訪問從左到右… . …
需計算的成員訪問從左到右… [ … ]
new (帶參數列表)n/anew … ( … )
17函數調用從左到右… (?…?)
new?(無參數列表)從右到左new …
16后置遞增(運算符在后)n/a… ++
后置遞減(運算符在后)n/a… --
15邏輯非從右到左! …
按位非從右到左~ …
一元加法從右到左+ …
一元減法從右到左- …
前置遞增從右到左++ …
前置遞減從右到左-- …
typeof從右到左typeof …
void從右到左void …
delete從右到左delete …
14乘法從左到右… *?…
除法從左到右… /?…
取模從左到右… %?…
13加法從左到右… +?…
減法從左到右… -?…
12按位左移從左到右… <<?…
按位右移從左到右… >>?…
無符號右移從左到右… >>>?…
11小于從左到右… <?…
小于等于從左到右… <=?…
大于從左到右… >?…
大于等于從左到右… >=?…
in從左到右… in?…
instanceof從左到右… instanceof?…
10等號從左到右… ==?…
非等號從左到右… !=?…
全等號從左到右… ===?…
非全等號從左到右… !==?…
9按位與從左到右… &?…
8按位異或從左到右… ^?…
7按位或從左到右… |?…
6邏輯與從左到右… &&?…
5邏輯或從左到右… ||?…
4條件運算符從右到左… ? … : …
3賦值從右到左… =?…
… +=?…
… -=?…
… *=?…
… /=?…
… %=?…
… <<=?…
… >>=?…
… >>>=?…
… &=?…
… ^=?…
… |=?…
2yield從右到左yield?…
yield*從右到左yield*?…
1展開運算符n/a...?…
0逗號從左到右… ,?…

?

?可以看出!比instanceof優先級高。所以不能寫!arr instanceof Array 要用括號括起來!(arr instanceof Array)。

點(.)運算符優先級》new帶參數》函數調用()。

new Foo.getName(); //相當于new (Foo.getName)() new Foo().getName(); //相當于(new Foo()).getName() new new Foo().getName(); //相當于new ((new (Foo()).getName)()

?new Foo().getName();

?中成員訪問點運算符優先級是最高的,因此先執行了.getName(),重點是在進行左側取值的時候,

new Foo()可以理解為兩種運算

  • new 帶參數,即new Foo()
  • 函數調用先Foo()取值后再new

而new帶參數的優先級高于函數調用,因此先執行了new Foo()得到Foo的實例對象再進行成員訪問.getName。

?

參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Logical_Operators

?

?本文作者starof,因知識本身在變化,作者也在不斷學習成長,文章內容也不定時更新,為避免誤導讀者,方便追根溯源,請諸位轉載注明出處:http://www.cnblogs.com/starof/p/6370906.html有問題歡迎與我討論,共同進步。

轉載于:https://www.cnblogs.com/starof/p/6370906.html

總結

以上是生活随笔為你收集整理的javascript 表达式和运算符 (二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。