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...