一些特殊運算子的理解

2021-07-28 02:38:16 字數 1351 閱讀 3338

1、in    

eg:x in o     (檢測o物件是否擁有x屬性)

in 運算子(in的左側是字串或者可以轉為字串  ,右側是物件 )

*可以檢測繼承的屬性

*注意的是對陣列檢測的是下標值

2、instanceof   (左側是物件,右側是標識物件的類即建構函式)

* 如果左側不是物件則返回false,右側不是函式則丟擲乙個型別錯誤異常

* 返回的型別有:string number boolean function object array date  ,只能返回new的物件的型別,不能返回直接量的型別

3、eval() (解釋執行js源**組成的字串)

其實eval()是乙個函式也是乙個運算子,它作為函式來講,缺點是1、動態執行的**是不能分析的,就是說直譯器不能對呼叫了eval()的函式進行優化;2、它可以被賦予其他的名字,即var a = eval;這樣直譯器也無法優化呼叫a()的函式,所以es3規定任何直譯器都不允許對eval()賦予別名,如果eval()函式通過別名呼叫的話會拋異常evalerror。但es5是反對evalerror的,所以es5規定直接使用eval()的,總是在呼叫它的上下文作用域內執行,如果給eval賦予其他名字然後再呼叫的話,作用的是全域性物件,並且無法讀寫、定義區域性變數和函式

eg:function fun()

fun();

console.log(x);  //4    sd("x = 4;");相當於隱式定義了全域性x並賦值為4

*es5嚴格模式下,不可以給eval賦予其他名字並將eval列為保留字,並且區域性環境中也只能查詢和修改區域性變數,不能新定義變數或函式

*ie9之前的版本呼叫eval的別名時,不會操作全域性的物件,僅僅當做區域性的eval()呼叫,並且也不會拋異常,但是ie定義了乙個execscript()全域性函式來完成全域性eval()的功能,不同的是execscript()總是返回null

eval()只接受乙個引數,這個引數要不是字串的話,它會直接返回這個引數,否則就把字串當成js**進行編譯,編譯成功的話會返回字串中的最後乙個表示式或語句的值,沒有值的話就返回undefined,編譯失敗的話會丟擲語法異常(syntaxerror)

eval()的作用域環境和呼叫它的變數是一樣的,它在區域性環境中呼叫就會影響區域性變數的值,在全域性環境中呼叫就會影響全域性變數的值

4、typeof x      x可以是任意型別的運算元

它只能返回    'undefined' 「string」 'number' 'boolean'  'function'  'object'  不能具體細分object,並且對於null會返回object

參考js權威指南,自己總結

js運算子的一些特殊應用

本文集合了了js運算子的一些特殊應用。js位執行符的運用。js運算子的使用技巧。str1 indexof str2 str1 被查詢的字串 str2 查詢的字串 如果 str1 不含有 str2 則返回數字 0 例 var str1 abc var str2 a if str1.indexof st...

一些運算子

int a 3 int b a 先把a的值賦給b,a再自增 int c a a先自增,再把值賦給c system.out.println a system.out.println b system.out.println c 結果輸出 535 冪運算,計算2 3 double pow math.po...

R語言較為特殊的一些運算子

跟其他語言,r語言基本上都保持了一致,但是有些運算子卻有些不太一樣。在這做下筆記 a 8 b 12 t 1 10 a in t 1 true b in t 1 false t 1 10 t 1 123 4567 8910 t 1 2 10warning message in 1 2 10 numer...