JavaSript は非常に優れた言語です。変数の型の変更、オブジェクトへのメソッドやプロパティの追加、さまざまな変数型の演算子の使用など、さまざまなことができるので、その柔軟性が気に入っています。
ただし、JavaScript を柔軟に使用するには、依然として代償を払わなければなりません。開発者は、加算 ( + )、等しいか等しい ( == および === )、等しくない ( !== または === ) など、さまざまな型を処理するためにさまざまな演算子を使用する方法を理解する必要があります。同時に、多くの演算子は独自の方法を使用して型変換を処理できます。
最も一般的に使用される演算子の 1 つは加算演算子です: + 。この演算子は、文字列と数値を連結するために使用されます。
// string + string = string (concatenation)var result = "Hello, " + "World!";console.log(result); // "Hello, World!"
// number + number = number (addition)var result = 10 + 5; console.log(result);// 15
JavaScript では、 object 、 array 、 null または unknown の演算子を使用できます。次に、これらを使用するためのルールと詳細を見ていきます。
JavaScript の演算子を使用していくつかの型を変換する方法を理解するために、以下のいくつかの例を見てみましょう:
operand + operand = result
オブジェクト変換:
2 つのオペランドがプリミティブ型である場合、演算子はチェックし、少なくとも 1 つのオペランドが文字列である場合、それらは文字列として連結されます。他の場合には、オペランドは単純に数値として扱われ、加算演算が実行されます。
次の例は、加算演算子をより深く理解するのに役立ち、同時により複雑な状況での変換方法を理解するのに役立ちます。
var result = 1 + "5"; //"15"
2 番目のオペランドは文字列です。最初のオペランドは数値を文字列に変換し、それらを連結します。
var result = [1,3,5] + 1; // "1,3,51"
最初のオペランドは値を文字列に変換する配列です。オペランドが数値の場合、値を文字列に変換し、2 つの文字列を連結します。
var result = 10 + true; // 11
どちらのオペランドも文字列ではないため、ブール値は数値に変換されてから数値の加算演算が実行されます。
var result = 15 + {};//"15[object Object]"
2 番目のオペランドはオブジェクトであり、文字列に変換されます。 valueOf() メソッドは、toString() メソッドを使用してプリミティブ値ではなくオブジェクト自体を返すため、文字列を返します。
2 番目のオペランドは文字列に変換されます。このとき、数値も文字列に変換され、2 つのオペランドが文字列接続されます。
var result = 8 + null; //8
如果操作数不是对象或字符串时, null 将转换为数字,然后做数字的加法运算。
var result = "queen" + null; // "queennull"
因为第一个操作数是一个字符串,所以 null 将转换为一个字符串 "null" ,然后两个操作数做字符串连接。
var result = 12 + undefined; // NaN
因为没有操作数是对象或字符串, undefined 将转换为 NaN 。两个数字做加法运算,因为任何一个数字和 NaN 做加法运算,其值都等于 NaN
console.log(1 + "5"); // "15"console.log([1, 3, 5] + 1); //"1,3,51"console.log(10 + true); //11console.log(15 + {}); //"15[object Object]"console.log(8 + null); // 8console.log("queen" + null); // "queennull"console.log({} + null); // "[object Object]null"console.log(12 + undefined); //NaNconsole.log("w3cplus" + undefined);//"w3cplusundefined"console.log([] + null); // "null"console.log([] + undefined); // "undefined"console.log([] + "w3cplus"); // "w3cplus"
为了避免潜在的问题,不在对旬上直接使用加法操作符,除非明确使用 toString() 或 valueOf() 方法。
如上面的示例所示,上面有一些特列的案例。简单点说,如果开发人员知道确切的数据类型在做加法操作的时候,知道场景的转换规则,将会帮助你减少出错的概率,让你编码也更开心。
本文根据 @Dmitri Pavlutin 的《 JavaScript addition operator in details 》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处: http://rainsoft.io/javascriptss-addition-operator-demystified/ 。
常用昵称“大漠”,W3CPlus创始人,目前就职于手淘。对HTML5、CSS3和Sass等前端脚本语言有非常深入的认识和丰富的实践经验,尤其专注对CSS3的研究,是国内最早研究和使用CSS3技术的一批人。CSS3、Sass和Drupal中国布道者。2014年出版《 图解CSS3:核心技术与案例实战 》。