JavaScriptの1元演算子

3091 ワード

JavaScriptには9種類のよく使われている1元演算子があります.本稿では簡単な羅列と説明を行います.
加算演算子+
操作数をデジタルfunctionとobjectに変換すると、ほとんどの場合NaNに変換されます.オブジェクトがvalueOf関数値という名前を持っていない限り、その関数は戻り値があります.
+{
  valueOf: function(){
    return '0xFF'
  }
}
//returns 255
マイナス演算子-
操作数を数字に変換し、同時に負の数に変更します.
論理は逆演算子を取ります.
逆を取る前に、暗黙のタイプに変換されます.
インクリメント+と逓減--
操作数をインクリメントまたは減少させます.C言語のように、前と後ろに置くと違います.
ビット別の演算子~
いずれの数値xに対してもビット別非演算の結果は-(x+1)です.
typeof
操作数はtypeofの後ろに置いて、現在の操作数の種類を返します.数値の種類については正確に返します.参照の種類については、Functは「function」に戻ります.他は「object」に戻ります.
delete
配列またはオブジェクト内の特定のインデックスの値を削除した場合、trueに戻り、削除に失敗した場合はfalseに戻ります.
//     
var hi = 1;
delete hi;          // returns false
console.log(hi);    // returns 1

//     
function yo(){ };
delete yo;           // returns false
console.log(yo);     // returns function foo(){ }

//     
var pub = {bar: '1'}
delete pub           // returns false
console.log(pub);    // returns {bar: '1'}

//    
var code = [1,1,2,3,5]
delete code          // returns false
console.log(code);   //  [1,1,2,3,5]
配列のインデックス削除:
//          
var lol=[20,30,40];
console.log(lol.length);     // returns 3
delete lol[2]                // returns true
console.log(lol);            // returns [ 20, 30,  ]
console.log(lol[2]);         // returns undefined
console.log(lol.length);     // returns 3
void
表式の戻り値を破棄し、undefinedに戻るにはvoid式、void式があります.
付:足し算の隠し箱
足し算の過程で、まず等号の左右を元の値ToPrimitive()として操作して、二つの原値が一つのStringタイプであれば、二つの原値をすべて文字列ToString()に変換して、文字列をつなぎ合わせます.二つの元の値を全部数字ToNumber()に変換して、数字を加算します.ToPrimitive(input[、PrferredType])はinputを元の値に変換し、PreferredTypeはオプションのパラメータで、NumberまたはStringのみを受け入れ、変換偏愛を設定するために一般的に、Dateに原値を求めると、PreferredTypeはSteringであり、他のObjectオブジェクトは全てNumberである.
PreferredType変換戦略
  • PreferredTypeはStringであり、toString()を先に呼び出し、結果が元の値でない場合はvalueOf()を呼び出し、元の値でない場合はエラーを投げます.
  • PreferredTypeはNumberである場合、まずvalueOfを呼び出して、tostring()
  • を呼び出します.
    練習します
    [] + [] // ""
    ToPrimitiveを行うと、いずれもArayオブジェクトであり、Dateオブジェクトではないので、Numberを変換基準としていますので、まずvalueOfを呼び出します.結果は元の値ではないので、toString()を呼び出し続けます.結果は元の値です.二つ目の[]のプロセスは同じで、「」を返します.プラス記号は両方の結果がStringタイプなので、文字列のスペルを行います.結果は「」です.
    [] + {} // "[object Object]"
    ToPrimitiveを行いますが、依然としてNumberを変換基準としています.[]の結果は「」です.{}まずvalueOfを呼び出して、{}元の値ではないので、tostring()を呼び出し続け、結果は「Object Object」で、元の値です.「Object」を返します.プラス記号は両方ともSteringタイプなので、文字列をつなぎ合わせて、結果は「object Object」です.
    {} + [] // 0
    この問題は前の問題の手順によって道理を説明すれば、結果はやはり「object Object」ですが、結果は予想通りです.表示された答えは0です.これはどういう理由ですか?もとは{}+[]が{}に解析されました.前は空いているコードブロックを省略しました.残りは+[]で演算されます.[]の元の値は”で、”をNumberに変換した結果は0です.
    {} + {} // "[object Object][object Object]"
    スズメバージョンのchromeブラウザとnodeでは、結果が期待に合致します.結果は「object Object」です.通常バージョンのchromeブラウザで結果はNaNです.これはなぜですか?なぜならnodeの中で「{」で始まります.「}」で終わる語句を外に包んで、()になります.結果は予想通りです.普通バージョンのchromeは依然、{}+に解析されます.{}結果はNaNになりました.
    参照
    developer.mozila Bitwise operators JavaScript Unity Operators:Simple and Usefuljs隠しタイプ箱詰め-ToPrimitive