三・JS演算子
6464 ワード
JavaScriptの演算子は主に簡単な表現を接続するために用いられ、複雑な表現を構成します.一般的には、演算式、比較式、論理式、賦値式などがあります.単眼演算子もあります.元の表現を操作します.ほとんどの演算子は句読点で構成されます.また、typeof、delete、instance ofなどのキーワードで表される演算子もあります.
いくつかの演算子は、任意のデータタイプ(typeof)に作用することができますが、ほとんどの演算子は、特定のタイプであり、ほとんどの演算子は、特定のタイプの値(typeofが返しているとよく言われています)を計算します.JavaScriptでは演算子は通常、必要に応じて操作数をタイプ変換し、乗算演算子の希望操作数は数字であるが、「3」*「5」も合法的であり、JavaScriptは自動的にそれをデジタル計算に変換し、Number 15に戻る.いくつかのオペレータは異なるデータタイプに対して異なる意味を持っています.は、両方の操作数が数字の場合、足し算をします. 両のパラメータは文字列であり、パラメータが文字列である場合、もう一つのパラメータを文字列に変換して文字列をスティッチングします. は、パラメータにオブジェクトがある場合には、そのvalueOfまたはtoStringを呼び出す. は、文字列パラメータが一つしかないときに、それを数値に変換しようと試みる. は、1つの数値パラメータだけが正の値を返します.
演算子演算子
変数に値を割り当てるための演算子です.最も一般的な演算子はもちろん、等号です.式x=yはyをxに割り当てます.このほか、JavaScriptは他の11の割当演算子を提供します.
演算子を比較して2つの値を比較し、ブール値を返します.比較条件が満たされているかどうかを表します.JavaScriptは8つの比較演算子を提供します.
小かっこ
JavaScriptでは、丸括弧は演算子であり、2つの使い方があります.式を括弧の中に入れると、値を求める役割があります.関数の後に付いている場合、関数は呼び出しです.式を丸括弧に入れると、式の値が返されます.
void
void演算子は、式を実行してundefinedに戻ります.
コンマ演算子
コンマ演算子は、2つの表式の値を求めて、次の表式の値を返します.
演算子の優先度と結合性
演算子
操作
結合性
タイプ
++
自己増加する
R
lval->num
--
自滅する
R
lval->num
を選択します.
反逆を求める
R
num->num
+
(一つの操作数)を数字に変換します.
R
num->num
~
位によって逆を求める
R
int->int
!
論理的でない
R
ブック
delete
属性を削除
R
lval->book
typeof
検出データタイプ
R
any->str
void
undefinedを返します
R
any->undefined
*、/、%
暇をかける
L
num->num
+、-
プラス・マイナス
L
num->num
+
文字列スティッチング
L
str
、>=
数字のサイズまたはアルファベットの順序
L
num/str,num/str->book
instance of
オブジェクトの種類
L
obj,function->book
in
属性の有無をテストします.
L
str,obj->book
==
判断が等しい
L
any、any->book
!=
判断がまちまちである
L
any、any->book
==
恒久判断
L
any、any->book
!==
判断は恒常ではない
L
any、any->book
&&&
論理和
L
any、any->any
二本の縦
論理または
L
any、any->any
?:
条件演算子
R
book,any,any->any
=賦値*===、+=、-=
値を演算し、かつ値を割り当てます.
R
lval,any->any
を選択します.
最初の操作数を無視して、2番目の操作数を返します.
L
any、any->any
優先度の意味は分かりますが、結合は同じ優先度を持つ演算子式の演算順を指します.ある演算子は左結合で、つまり演算は左から右にかけて行われます.下の二つの演算は同じです.w=(x+y)+zある演算子は右結合のw=x=y=zです.w=(x=(y=z)w=a:b:cd:ef:gw=ab:(c?d:(e?f:g);演算子の優先順位は「JavaScript権威ガイド」の中によく述べられています.ここでR/Lは結合性が右結合か左結合かを表します.num->numはオペレータの期待するデータタイプと計算結果タイプを表します.lvalは左値を指します.
演算子
操作
結合性
タイプ
++
自己増加する
R
lval->num
--
自滅する
R
lval->num
を選択します.
反逆を求める
R
num->num
+
(一つの操作数)を数字に変換します.
R
num->num
~
位によって逆を求める
R
int->int
!
論理的でない
R
ブック
delete
属性を削除
R
lval->book
typeof
検出データタイプ
R
any->str
void
undefinedを返します
R
any->undefined
*、/、%
暇をかける
L
num->num
+、-
プラス・マイナス
L
num->num
+
文字列スティッチング
L
str
、>=
数字のサイズまたはアルファベットの順序
L
num/str,num/str->book
instance of
オブジェクトの種類
L
obj,function->book
in
属性の有無をテストします.
L
str,obj->book
==
判断が等しい
L
any、any->book
!=
判断がまちまちである
L
any、any->book
==
恒久判断
L
any、any->book
!==
判断は恒常ではない
L
any、any->book
&&&
論理和
L
any、any->any
二本の縦
論理または
L
any、any->any
?:
条件演算子
R
book,any,any->any
=賦値*===、+=、-=
値を演算し、かつ値を割り当てます.
R
lval,any->any
を選択します.
最初の操作数を無視して、2番目の操作数を返します.
L
any、any->any
注意:
1.typeofの優先度はかなり高く、加減乗除などよりも高いので、演算子ですが、複雑な表現の場合はかっこをつけるのが習慣です.例を見ます.
五分五分
五分五分
私達は知っています.この二つの値の等しい性を判断します.その違いは分かります.==厳格な意味の等しいです.NaNとNaNなどに注意すればいいです.使用する時、javascriptは私達にタイプ転換をしてくれます.いくつかの不思議な結果をもたらします.では、使用する時はどのような状況でタイプ転換をしますか?1.2つの値のタイプが同じであれば、厳密に等しい演算を行います.2つの値の種類が異なる場合は3.null、一つはundefinedであれば、等しい4.一つは数字で、一つは文字列であれば、まず文字列を数字に変えて、5を比較します.一つの値がtrue/falseであれば、1/0比較6にします.一つの値が対象であれば、値は対象です.一つは数字または文字列で、valueOfとtoString変換を使って7を比較してみます.他は同じではありません.
いくつかの演算子は、任意のデータタイプ(typeof)に作用することができますが、ほとんどの演算子は、特定のタイプであり、ほとんどの演算子は、特定のタイプの値(typeofが返しているとよく言われています)を計算します.JavaScriptでは演算子は通常、必要に応じて操作数をタイプ変換し、乗算演算子の希望操作数は数字であるが、「3」*「5」も合法的であり、JavaScriptは自動的にそれをデジタル計算に変換し、Number 15に戻る.いくつかのオペレータは異なるデータタイプに対して異なる意味を持っています.
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
console.log(+"4");//4
遠演算子タイプ演算子演算子
- (Addition):x + y
- (Subtraction): x - y
- (Multiplication): x * y
- (Division):x / y
- (Remainder):x % y
- (Increment):++x x++
(Decrement):--x x--
(Negate):-x
(Convert to number): +x
割り当て演算子変数に値を割り当てるための演算子です.最も一般的な演算子はもちろん、等号です.式x=yはyをxに割り当てます.このほか、JavaScriptは他の11の割当演算子を提供します.
- x += y // x = x + y
- x -= y // x = x - y
- x *= y // x = x * y
- x /= y // x = x / y
- x %= y // x = x % y
- x >>= y // x = x >> y
- x <<= y // x = x << y
- x >>>= y // x = x >>> y
- x &= y // x = x & y
- x |= y // x = x | y
- x ^= y // x = x ^ y
比較演算子演算子を比較して2つの値を比較し、ブール値を返します.比較条件が満たされているかどうかを表します.JavaScriptは8つの比較演算子を提供します.
- ==
- ===
- !=
- !==
- <
- <=
- >
- >=
ブール演算子- !
- &&
- ||
- condition? true case : false case
ビット演算子- (or): |, 1, 1, 0。
- (and): &, 1, 1, 0。
- (not): ~, 。
- (xor): ˆ, 1 , 1, 0。
- (left shift): <<
- (right shift): >>
- (zero filled right shift): >>>
その他小かっこ
JavaScriptでは、丸括弧は演算子であり、2つの使い方があります.式を括弧の中に入れると、値を求める役割があります.関数の後に付いている場合、関数は呼び出しです.式を丸括弧に入れると、式の値が返されます.
void
void演算子は、式を実行してundefinedに戻ります.
コンマ演算子
コンマ演算子は、2つの表式の値を求めて、次の表式の値を返します.
演算子の優先度と結合性
演算子
操作
結合性
タイプ
++
自己増加する
R
lval->num
--
自滅する
R
lval->num
を選択します.
反逆を求める
R
num->num
+
(一つの操作数)を数字に変換します.
R
num->num
~
位によって逆を求める
R
int->int
!
論理的でない
R
ブック
delete
属性を削除
R
lval->book
typeof
検出データタイプ
R
any->str
void
undefinedを返します
R
any->undefined
*、/、%
暇をかける
L
num->num
+、-
プラス・マイナス
L
num->num
+
文字列スティッチング
L
str
、>=
数字のサイズまたはアルファベットの順序
L
num/str,num/str->book
instance of
オブジェクトの種類
L
obj,function->book
in
属性の有無をテストします.
L
str,obj->book
==
判断が等しい
L
any、any->book
!=
判断がまちまちである
L
any、any->book
==
恒久判断
L
any、any->book
!==
判断は恒常ではない
L
any、any->book
&&&
論理和
L
any、any->any
二本の縦
論理または
L
any、any->any
?:
条件演算子
R
book,any,any->any
=賦値*===、+=、-=
値を演算し、かつ値を割り当てます.
R
lval,any->any
を選択します.
最初の操作数を無視して、2番目の操作数を返します.
L
any、any->any
優先度の意味は分かりますが、結合は同じ優先度を持つ演算子式の演算順を指します.ある演算子は左結合で、つまり演算は左から右にかけて行われます.下の二つの演算は同じです.w=(x+y)+zある演算子は右結合のw=x=y=zです.w=(x=(y=z)w=a:b:cd:ef:gw=ab:(c?d:(e?f:g);演算子の優先順位は「JavaScript権威ガイド」の中によく述べられています.ここでR/Lは結合性が右結合か左結合かを表します.num->numはオペレータの期待するデータタイプと計算結果タイプを表します.lvalは左値を指します.
演算子
操作
結合性
タイプ
++
自己増加する
R
lval->num
--
自滅する
R
lval->num
を選択します.
反逆を求める
R
num->num
+
(一つの操作数)を数字に変換します.
R
num->num
~
位によって逆を求める
R
int->int
!
論理的でない
R
ブック
delete
属性を削除
R
lval->book
typeof
検出データタイプ
R
any->str
void
undefinedを返します
R
any->undefined
*、/、%
暇をかける
L
num->num
+、-
プラス・マイナス
L
num->num
+
文字列スティッチング
L
str
、>=
数字のサイズまたはアルファベットの順序
L
num/str,num/str->book
instance of
オブジェクトの種類
L
obj,function->book
in
属性の有無をテストします.
L
str,obj->book
==
判断が等しい
L
any、any->book
!=
判断がまちまちである
L
any、any->book
==
恒久判断
L
any、any->book
!==
判断は恒常ではない
L
any、any->book
&&&
論理和
L
any、any->any
二本の縦
論理または
L
any、any->any
?:
条件演算子
R
book,any,any->any
=賦値*===、+=、-=
値を演算し、かつ値を割り当てます.
R
lval,any->any
を選択します.
最初の操作数を無視して、2番目の操作数を返します.
L
any、any->any
注意:
1.typeofの優先度はかなり高く、加減乗除などよりも高いので、演算子ですが、複雑な表現の場合はかっこをつけるのが習慣です.例を見ます.
typeof 2*3;//NaN
typeof (2*3);//"number"
typeof 2+3;// "number3"
2.+、--は右結合のオペレータであり(一番高い優先度のいくつかは右結合である)、しかも加減乗除の優先度より高い.同時に、自己増加、自己減算演算子の演算数は、左の値(与えられた記号の左にある値)であり、定数ではありません.4++; //ReferenceError: Invalid left-hand side expression in postfix operation
var a=0,b=0;
a+++b;//0
a;//1,++ + , (a++)+b
b;//0
3.分配演算子の優先度はかなり低いです.a = b == c; // a = (b==c)
4.非論理優先キューの先端にも加減乗除より高いが、論理和、論理または優先度が低いので、加減乗除の方がいいです.!2*0; //0, (!2)*0
5.論理演算子に関する面白いところは「短絡」の機能です.皆さんは知っていると思いますが、いくつかの問題はそんなに単純ではなく、式計算値と合わせて考察します.1 && 3;
1 && "foo" || 0;
1 || "foo" && 0
論理演算子の「短絡」の特徴を知ると、元の表式の「戻り値」自体が分かりやすくなります.五分五分
五分五分
私達は知っています.この二つの値の等しい性を判断します.その違いは分かります.==厳格な意味の等しいです.NaNとNaNなどに注意すればいいです.使用する時、javascriptは私達にタイプ転換をしてくれます.いくつかの不思議な結果をもたらします.では、使用する時はどのような状況でタイプ転換をしますか?1.2つの値のタイプが同じであれば、厳密に等しい演算を行います.2つの値の種類が異なる場合は3.null、一つはundefinedであれば、等しい4.一つは数字で、一つは文字列であれば、まず文字列を数字に変えて、5を比較します.一つの値がtrue/falseであれば、1/0比較6にします.一つの値が対象であれば、値は対象です.一つは数字または文字列で、valueOfとtoString変換を使って7を比較してみます.他は同じではありません.