ホームページ ウェブフロントエンド jsチュートリアル JavaScript 応用プログラミング(第 3 版)学習ノート 4 js 演算子と演算子_基礎知識

JavaScript 応用プログラミング(第 3 版)学習ノート 4 js 演算子と演算子_基礎知識

May 16, 2016 pm 05:49 PM
オペレーター オペレーター

在ECMAScript中,有非常丰富的运算符和操作符,在这篇文章中将按通常的分类来稍微整理一下,不过在整理之前,先说明一下:

1、虽然标题是运算符和操作符,然而在我看来并没有多少严格区分的必要,在英文中,貌似也是用一个Operator来表示,所以在下文中我可能会混用。甚至,一些不属于运算符和操作符范畴的,我也整理在这里,只要我觉得必要。

2、对于运算符的优先级,你无需一一牢记——我相信你知道最简单的”先乘除,后加减”,至于其它的,如果你不确定,加上括号好了。在ECMAScript中,优先级相同的从左向右运算。

3、对于一些编程语言通用的运算符,比如常用算术运算符(+-*/),我只会简单的列举一下,不会展开,但是请注意,并不是说这些不重要,相反,这些通用运算符甚至处于一个非常基础的地位,只是我觉得你应该早已经熟悉,没必要在这里花时间强调。

4、那么,这里重点关注什么呢?就是一些在ECMAScript中比较特殊的操作符,或者我认为值得花时间强调的一些地方。

运算符与操作符

などの算術演算子に対応します。
类别 操作符  描述 说明
一元操作符 ++  自增1

1、自增(减)有前置和后置两种类型,前置先自增(减)再参与其它运算,后置先参与其它运算再自增(减)。

2、在ES中,自增(减)不仅适用于整数,它们可以作用于任意值,对于不是Number类型的值,会先按前一篇文章中的规则隐式转换为Number,然后再自增(减),此时变量类型也会变成Number类型。

--  自减1
+  一元加 一元加最主要的应用就是将操作数转变为Number类型,相当于调用Number()转换。 
-  一元减 一元减则是在一元加的基础之上再取其相反数。
算术操作符 +  加

1、除了加(+)之外,如果操作数不是Number类型,会自动调用Number()转换为Number类型再进行计算。

2、对于加减(+-),除了作为算术运算符。还可以作为一元操作符(见上)。当然,由于字符串操作中对加号(+)的重载,还可以用于将任意数值(的字符串)相连,这也是第1点中为什么要除了加(+),它在含有非Number类型值时,会将所有操作数转换为字符串相连接。

3、与一般类C语言不同,在ES中,除(/)和取模(%)并不会区分整数和浮点数,比如 5 / 2 = 2.5 而不是2,5.3 % 3 = 2.3 而不是2。

4、任意运算,只要操作数含NaN,结果就是NaN。但并不是结果为NaN就一定有一个操作数为NaN,比如0/0也返回NaN。

5、对于含无穷Infinity的运算,规定比较多,这里就不列举了,可以参考原书,或者自行测试。

-  减
*  乘
/  除
%  取模
逻辑操作符

(布尔操作符)

!  逻辑非

首先将操作数转换为Boolean类型值,然后再取反。可以使用双重非!!将一个数值转换为相应的Boolean值。 

&&  逻辑与

1、当两个操作数相应的Boolean值均为true时,返回true

2、短路:当第一个操作数相应的Boolean值为false时,会直接返回false,不会再计算第二个操作数。这常常被应用在判断一个变量(属性)是否有定义,如:
if(object && object.name && object.name = 'linjisong'){ }
 这里会首先判断object存在,不存在的话就不会解析object.name从而阻止错误的发生,同样,也只有object.name存在,才会去比较这个值。

||  逻辑或

1、当两个操作数相应的Boolean值至少有一个为true时,返回true

2、短路:当第一个操作数相应的Boolean值为true时,会直接返回true,不会再计算第二个操作数。

3、逻辑或,除了用于一般的判断之外,还常常被应用在提供默认值的情况,如:

function Fn(obj){
   obj = obj || {};
}

这里如果调用Fn未传入obj,则会自动给obj赋值为undefined,然后因为undefined的相应Boolean值为false,所以会将一个空对象{}赋值给obj,如果调用传入了obj,则因为任意对象的Boolean值为true,所以就不会取后面的{},从而达到给obj一个默认值{}的效果。

这种方式还被应用在大型JS库的多个相对独立的文件中:
//jsLib
var jsLib;
//file1
(function (jsLib){
   jsLib = jsLib || {};
})(jsLib);

//file2
(function (jsLib){
   jsLib = jsLib || {};
})(jsLib);


使用这种方式,无论先加载哪个文件,都会判断jsLib是否已经定义,如果未定义就提供一个默认值,这样做可以使得相对独立模块可以不用考虑加载顺序。

关系操作符

(比较操作符)

< 小于

1、只要有一个操作数是Number类型或Boolean类型值,就将两个操作数转换成Number类型值(如果需要转换)执行数值比较。

2、字符串比较,会逐个比较字符编码值。

3、操作符是对象时,调用valueOf()(如果没有,就调用toString()),再将结果按上面规则比较。

4、任意数和NaN比较返回false。

<= 小于或等于
>  大于
>=  大于或等于
==  相等

1、相等和不等(==、!=)在比较时,只要有必要,就会隐式类型转换。

2、全等和不全等(===、!==)在比较时,不会转换类型,如果类型不一致,直接为!==。

3、结合1、2,可以知道,a===b则一定有a==b,而a!=b则一定有a!==b。

!= お待ちください
=== 合同
!== 一致しません
代入演算子 = 課題
複合算術代入演算子 算術演算子プラス = は、=、-=、*=、/=、%=
複合ビット単位代入演算子 ビット演算子プラス = は、~=、&=、|=、^=、<<=、>>=、>>>=
ビット演算子 ~ ビット単位ではありません ビット単位の反転、つまり補数コードを返します
& ビット単位 AND ビット位置合わせされたビットごとの演算。両方の演算ビットが 1 の場合にのみ 1 が返され、それ以外の場合、ビットは 0 を返し、最後にすべてのビット演算結果の組み合わせが を返します。
| ビット単位 OR ビット位置合わせされたビットごとの演算。両方の演算ビットが 0 の場合にのみ 0 が返され、それ以外の場合、ビットは 1 を返し、最後にすべてのビット演算結果の組み合わせが返されます。
^ ビット単位 XOR ビット位置合わせされたビットごとの演算。2 つの演算ビットが異なる場合は 1 を返し、それ以外の場合、ビットは 0 を返し、最後にすべてのビット演算結果の組み合わせを返します。
<< 左に移動 2 進数は左にシフトされ、左シフトによって符号ビットは変更されません
>> 符号付き右シフト 2 進数は右にシフトされ、上位ビットは一致するビットで埋められます
>>> 符号なし右シフト 2 進数は右にシフトされ、正の数の場合は結果は >> と同じになります。負の数の 2 の補数が処理されます。正の数のバイナリコードとして
文字列演算子 文字列連結 は concat() 関数と同等で、最初にすべてのオペランドを文字列に変換してからそれらを連結します。文字列の連結を実行すると、バックグラウンドで中間接続と破棄の処理が行われるため、文字列の連結操作が多数発生すると、その文字列は変更されないことに注意してください。実行されました。
= 文字列連結 a =b、a=a b と同等。
オブジェクト演算子 . 属性アクセサー 単純なオブジェクト プロパティ アクセサー。
[] プロパティまたは (クラス) 配列へのアクセス [] を通じて、名前が変数であるか、特殊文字が含まれているプロパティにアクセスできます。
新しい コンストラクターを呼び出してオブジェクト を作成します 新しく作成されたオブジェクトを返します。コンストラクター内の this は、この新しく作成されたオブジェクトを指します。
delete  变量、属性删除 删除属性(变量可以看成是全局对象或执行环境的一个属性)。
void   返回undefined。
in  判断属性 对象属性或原型链上的属性。
instanceof  原型判断 比较同一个上下文中的对象是否为另一个对象的原型。
其它操作符 ?:  条件操作符 语法;var value = exp ? trueExp : falseExp。 相当于var value; if(exp){ value = trueExp;}else{value = falseExp;}
,  逗号操作符 主要用于声明多个变量,这也是很多JS库的流行做法。例如:var num1=1,num2=2,num3=3;
()  分组操作符

主要用途:

1、结合逗号操作符用于赋值。例如:var num = (5,1,4,8,0);这里num最后的值为0。

2、转换为表达式。比如eval('('+jsStr+')');又比如:
function fn(){
}//函数声明,不能直接调用
(function fn(){
})();//使用()将函数括起来,便可以直接调用
3、用于调用函数。比如fn();。

typeof  类型操作符

返回一个字符串值:Undefined类型—>'undefined'、Null类型—>'object'、Boolean类型—>'boolean'、Number类型—>‘number'、String—>'string'、内置Function对象的实例—>'function'、其它Object类型—>'object'。(有些浏览器实现略有不同)

いくつかの点を説明します:

1. ここでの分類はそれほど厳密ではありません。たとえば、ビット単位の NOT (~)、論理 NOT (!)、delete、void、typeof はすべて単項演算子と見なされ、autoincrement () も使用されます。多くのマテリアルは算術演算子に分類されます。整理する際には主に原書の分類を参考にし、自然性も考慮しました。

2. プラス記号 ( ) の使用は比較的柔軟です。特に計算で使用する場合、その中の文字列を無視すると間違いが起こりやすいことに注意してください。

3. Typeof は通常、単純なデータ型を決定するために使用されます。オブジェクト型の場合、返されるオブジェクトのほとんどがオブジェクトであるため、instanceof の判断も、その条件を満たす必要があります。同じコンテキストである場合、エラーが発生します。別のより信頼性の高い方法については、後でオブジェクトを説明するときに説明します。

4. まず次のコードを確認します。

コードをコピーします コードは次のとおりです。 >
var numVal = 10.00,
strVal = '10',
strObj = new String('10')
console.info(numVal == strVal);//true
console.info(typeof (strVal strObj));//string

最初の出力は true ですが、予想を超えていますか?ここでは、== 比較演算子の暗黙的な型変換により、Number 型は String 型に変換され、その後、Number 型 10.00 は、小数点以下に 0 以外の値がないため、整数 10 に解析されます。ポイントなので、比較は等しくなります。 2 番目の出力は string で、これは実際には比較的簡単に理解できます。strVal は文字列であり、strObj は文字列オブジェクトであるため、この 2 つを加算すると、最終結果も文字列型になります。
5. 記号について、いくつかの一般的な使用法を繰り返してみましょう (正規表現での使用法はここでは関係ありません)。
(1) 単項プラス記号 ( ) を使用して Number 型に変換します。
(2) 二重論理否定(!!)を使用してブール型に変換します。
(3) 論理積 (&&) を使用して、オブジェクトが存在するかどうかを検出し、後続の操作を実行します。
(4) 論理和 (||) を使用して関数パラメータのデフォルト値を指定します。
(5) グループ化(())を使用して式として明示的に指定します。
(6) 中括弧 ({}) を使用して、オブジェクト リテラル、JSON データ形式、およびコード ブロックを定義します。
(7) 角括弧 ([]) を使用して、配列リテラル、JSON データ形式、配列へのアクセス、名前が変数または特殊文字であるプロパティへのアクセスを定義します。
6. ビット単位の演算に関しては、結果はあまり直感的ではありませんが、演算効率が高く、中間変数を使用せずに 2 つの値を直接交換したり、奇数と偶数を判断したり、MD5 暗号化など、興味深い応用例が多数あります。 、など。興味のある友人は、関連する情報を見つけて、自分で調査することができます。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語のルート演算子とは何ですか? C言語のルート演算子とは何ですか? Mar 06, 2023 pm 02:39 PM

C 言語にはルート演算子はなく、ルートを開くには組み込み関数 "sqrt()" が使用され、構文 "sqrt(value x)" が使用されます (例: "sqrt(4)")。 4. に対して平方根演算を実行すると、結果は 2 になります。 sqrt() は C 言語の組み込みルート演算関数であり、その演算結果は関数変数の算術平方根であり、この関数は負の値を演算したり、虚数の結果を出力したりすることはできません。

Golang エラー:「... 演算子の使用が無効です」どうすれば解決できますか? Golang エラー:「... 演算子の使用が無効です」どうすれば解決できますか? Jun 24, 2023 pm 05:54 PM

Golang 開発者にとって、「invaliduseof...operator」はよくあるエラーです。このエラーは通常、可変長パラメーター関数を使用するときに発生します。これはコンパイル時に検出され、どの部分に問題があるかが示されます。この記事ではこのエラーの解決方法を紹介します。 1. 可変長引数関数とは 可変長引数関数とは、可変長引数関数とも呼ばれ、Golang 言語における関数の一種です。可変長パラメータ関数を使用すると、次のように複数のパラメータ関数を定義できます。

Java で % は何を意味しますか Java で % は何を意味しますか Mar 06, 2023 pm 04:48 PM

Java では「%」は剰余を意味し、除算を実行して剰余を求めることができる二項算術演算子です。構文は「オペランド 1 % オペランド 2」です。剰余演算子 "%" のオペランドは通常、正の整数、負の数、さらには浮動小数点数です。この演算に負の数が含まれる場合、結果は前の数値が正か負かによって異なります。

C言語における+=演算子の意味と使い方の解析 C言語における+=演算子の意味と使い方の解析 Apr 03, 2024 pm 02:27 PM

+= 演算子は、左オペランドの値を右オペランドの値に加算し、その結果を左オペランドに割り当てるために使用されます。これは数値型に適しており、左オペランドは書き込み可能である必要があります。

PHPの「==」記号の意味は何ですか? PHPの「==」記号の意味は何ですか? Mar 14, 2023 pm 07:05 PM

PHP では、「==」記号は 2 つのオペランドが等しいかどうかを比較できる比較演算子で、構文は「オペランド 1 == オペランド 2」です。 「==」演算子は、左側の変数 (式または定数) が右側の変数 (式または定数) と同じ値を持つかどうかを比較およびテストします。比較するのは変数の値のみであり、データは比較しません。種類。 2 つの値が同じ場合は true 値を返し、2 つの値が同じでない場合は false 値を返します。

PHPで2つの数値が割り切れるかどうかを判断する方法 PHPで2つの数値が割り切れるかどうかを判断する方法 Jan 10, 2023 pm 03:12 PM

PHP では、「%」演算子と「==」演算子を使用して 2 つの数値が割り切れるかどうかを判断できます。「%」演算子を使用して 2 つの数値を除算して余りを求め、その後「=」演算子を使用するだけです。 =演算子 求めた余りが0かどうかを判定するだけです。 構文は「数値1 % 数値2 == 0」 0であれば割り切れます、0でなければ割り切れません。

Python 構文のマインド マップ: コード構造の深い理解 Python 構文のマインド マップ: コード構造の深い理解 Feb 21, 2024 am 09:00 AM

Pythonはそのシンプルで読みやすい構文から幅広い分野で広く使われています。プログラミングの効率を向上させ、コードがどのように機能するかを深く理解するためには、Python 構文の基本構造をマスターすることが重要です。この目的を達成するために、この記事では、Python 構文のさまざまな側面を詳しく説明した包括的なマインド マップを提供します。変数とデータ型 変数は、Python でデータを保存するために使用されるコンテナです。マインド マップには、整数、浮動小数点数、文字列、ブール値、リストなどの一般的な Python データ型が表示されます。各データ型には独自の特性と操作方法があります。演算子 演算子は、データ型に対してさまざまな操作を実行するために使用されます。マインド マップは、算術演算子、比率など、Python のさまざまな演算子の種類をカバーしています。

Python のマジックメソッド Python のマジックメソッド Apr 13, 2023 am 10:25 AM

Python のマジック メソッドは、クラスに「マジック」を追加できる特別なメソッドで、多くの場合、2 つのアンダースコアで囲まれた名前が付けられます。 Python の魔法のメソッド。ダンダー (二重下線) メソッドとも呼ばれます。ほとんどの場合、コンストラクター (init)、文字列表現 (str、repr)、算術演算子 (add/mul) などの単純なものに使用します。実は、聞いたことのない便利なメソッドがたくさんあります。この記事では、それらの魔法のメソッドを整理していきます! コンテナ クラスで使用できるイテレータ __len__ メソッドのサイズは誰もが知っています。 len() 関数がオンです。ただし、イテレータを実装したクラスオブジェクトの長さを取得したい場合は、

See all articles