在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,不会再计算第二个操作数。这常常被应用在判断一个变量(属性)是否有定义,如: |
|
|| | 逻辑或 |
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库的多个相对独立的文件中: //file2
|
|
关系操作符 (比较操作符) |
小于 |
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+')');又比如: |
|
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. まず次のコードを確認します。
strVal = '10',
strObj = new String('10')
console.info(numVal == strVal);//true
console.info(typeof (strVal strObj));//string
5. 記号について、いくつかの一般的な使用法を繰り返してみましょう (正規表現での使用法はここでは関係ありません)。
(1) 単項プラス記号 ( ) を使用して Number 型に変換します。
(2) 二重論理否定(!!)を使用してブール型に変換します。
(3) 論理積 (&&) を使用して、オブジェクトが存在するかどうかを検出し、後続の操作を実行します。
(4) 論理和 (||) を使用して関数パラメータのデフォルト値を指定します。
(5) グループ化(())を使用して式として明示的に指定します。
(6) 中括弧 ({}) を使用して、オブジェクト リテラル、JSON データ形式、およびコード ブロックを定義します。
(7) 角括弧 ([]) を使用して、配列リテラル、JSON データ形式、配列へのアクセス、名前が変数または特殊文字であるプロパティへのアクセスを定義します。
6. ビット単位の演算に関しては、結果はあまり直感的ではありませんが、演算効率が高く、中間変数を使用せずに 2 つの値を直接交換したり、奇数と偶数を判断したり、MD5 暗号化など、興味深い応用例が多数あります。 、など。興味のある友人は、関連する情報を見つけて、自分で調査することができます。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
