目錄
加法操作符
规则1:字符串连接
规则2:数字加法运算
使用规则
学习示例
示例1: 数字和字符串
示例2: 数字和数组
示例3: 数字和布尔值
示列4:数字和对象
示例5: 数字和 null
示例6: 字符串和 null
示例7: 数字和 undefined
总结
大漠
首頁 web前端 html教學 JavaScript中加号操作符细节_html/css_WEB-ITnose

JavaScript中加号操作符细节_html/css_WEB-ITnose

Jun 24, 2016 am 11:17 AM

JavaSript是一门非常优秀的语言。我喜欢它的灵活性,因为可以使用它做很多事情,比如说改变变量的类型,可以给对像添加方法或属性,也可以在不同的变量类型上使用操作符等等。

然而,要灵活的用好JavaScript还是需要付出一定的代价。开发人员需要了解如何使用不同的操作符处理不同类型,比如加法( + )、等于或全等于( == 和 === ),不等于或不全等( !== 或 === )等。同时许多操作符都可以使用自己的方式来处理类型的转换。

加法操作符

最常用的操作符之一是加法操作符: + 。这个操作符是用来连接字符串和数字。

规则1:字符串连接

// string + string = string (concatenation)var result = "Hello, " + "World!";console.log(result); // "Hello, World!"
登入後複製

规则2:数字加法运算

// number + number = number (addition)var result = 10 + 5;  console.log(result);// 15
登入後複製

JavaScript可以使用 object 、 array 、 null 或者 undefined 上使用操作符。接下来,我们看看使用这些的规则和细节。

使用规则

来看看下面的一些示例,了解JavaScript中如何通过操作符转换一些类型:

operand + operand = result  
登入後複製
  • 如果操作符数中有一个对象,它将转换为原始值( string 、 number 或 boolean )
  • 如果操作符数中有一个字符串,第二个操作数将转换成字符串,并且连接在一起转换成一个字符串
  • 在其它情况之下,两个操作数转换为数字并且将执行加法运算

对象转换的规则:

  • 如果对象类型是一个 Date ,可以使用 toString() 方法
  • 在其它情况下使用 valueOf() 方法,它将返回一个原始值
  • 如果 valueOf() 方法不能将它返回一个原始值,可以使用 toString() 方法。而这种情况大部分情况下都会发生

如果两个操作数是原始类型,那么操作符将会作检查,如果至少一个操作数是字符串的话,将会把它们当字符串连接在一起。在其它情况之下,只会把操作数当作数字,并且做加法运算。

学习示例

下面的示例帮助你更好的理解加法操作符,同时能了解一些更复杂情况之下如何时转换。

示例1: 数字和字符串

var result = 1 + "5"; //"15"
登入後複製
  • 1 + "5" :根据规则2,第二个操作数是一个字符串,那么数字 1 将会变成字符串 "1"
  • "1" + "5" : 字符串连接
  • "15"

第二个操作数是一个字符串。第一个操作数把 number 转换成 string ,然后将它们连接在一起。

示例2: 数字和数组

var result = [1,3,5] + 1; // "1,3,51"

  • [1,3,5] + 1 : 根据规则一,数组 [1,3,5] 将原始值转换出来 "1,3,5"
  • "1,3,5" + 1 : 根据规则二,数字 1 将会转换成字符串 "1"
  • "1,3,5" + "1" : 字符串连接
  • 1,3,51

第一个操作数是一个数组 array ,它将值转换为字符串,第二个操作数是数字,它将值转换为字符串,然后将两个字符串连接在一起。

示例3: 数字和布尔值

var result = 10 + true; // 11
登入後複製
  • 10 + true : 根据规则三,布尔值 true 将转换为数字 1
  • 10 + 1 : 数字做加法运算
  • 11

因为两个操作数都不是字符串,布尔值将转换为数字符,然后作数字加法运算。

示列4:数字和对象

var result = 15 + {};//"15[object Object]"
登入後複製
  • 15 + {} : 第二个操作数是一个对象,根据规则一和对象转换为字符串 [object Object]
  • 15 + "[object Object]" : 根据规则二,数字 15 转换为字符串 "15"
  • "15" + "[object Object]" : 字符串连接
  • "15[object Object]"

第二个操作数是一个对象,它将转换为一个字符串。因为 valueOf() 方法返回的是对象本身,而不是一个原始值,使用 toString() 方法,它返回的是一个字符串。

第二个操作数转换之后是一个字符串,此时数字也将转换为一个字符串,然后两个操作数做字符串连接。

示例5: 数字和 null

var result = 8 + null; //8
登入後複製
  • 8 + null : 因为操作数没有字符串,根据规则三, null 将转换为数字 0
  • 8 + 0 : 两个数字做加法运算
  • 8

如果操作数不是对象或字符串时, null 将转换为数字,然后做数字的加法运算。

示例6: 字符串和 null

var result = "queen" + null; // "queennull"
登入後複製
  • "queen" + null : 因为第一个操作数是一个字符串,根据规则二, null 将转换为一个字符串 "null"
  • "queen" + "null" : 字符串连接
  • "queennull"

因为第一个操作数是一个字符串,所以 null 将转换为一个字符串 "null" ,然后两个操作数做字符串连接。

示例7: 数字和 undefined

var result = 12 + undefined; // NaN
登入後複製
  • 12 + undefined : 因为没有任何一个操作数是字符串,根据规则三, undefined 将转换为一个数字 NaN
  • 12 + NaN : 做数字加法运算
  • 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:核心技术与案例实战 》。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML5中跨瀏覽器兼容性的最佳實踐是什麼? HTML5中跨瀏覽器兼容性的最佳實踐是什麼? Mar 17, 2025 pm 12:20 PM

文章討論了確保HTML5跨瀏覽器兼容性的最佳實踐,重點是特徵檢測,進行性增強和測試方法。

> gt;的目的是什麼 元素? > gt;的目的是什麼 元素? Mar 21, 2025 pm 12:34 PM

本文討論了HTML< Progress>元素,其目的,樣式和與< meter>元素。主要重點是使用< progress>為了完成任務和LT;儀表>對於stati

如何使用HTML5表單驗證屬性來驗證用戶輸入? 如何使用HTML5表單驗證屬性來驗證用戶輸入? Mar 17, 2025 pm 12:27 PM

本文討論了使用HTML5表單驗證屬性,例如必需的,圖案,最小,最大和長度限制,以直接在瀏覽器中驗證用戶輸入。

< datalist>的目的是什麼。 元素? < datalist>的目的是什麼。 元素? Mar 21, 2025 pm 12:33 PM

本文討論了html< datalist>元素,通過提供自動完整建議,改善用戶體驗並減少錯誤來增強表格。Character計數:159

< meter>的目的是什麼。 元素? < meter>的目的是什麼。 元素? Mar 21, 2025 pm 12:35 PM

本文討論了HTML< meter>元素,用於在一個範圍內顯示標量或分數值及其在Web開發中的常見應用。它區分了< meter>從< progress>和前

視口元標籤是什麼?為什麼對響應式設計很重要? 視口元標籤是什麼?為什麼對響應式設計很重要? Mar 20, 2025 pm 05:56 PM

本文討論了視口元標籤,這對於移動設備上的響應式Web設計至關重要。它解釋瞭如何正確使用確保最佳的內容縮放和用戶交互,而濫用可能會導致設計和可訪問性問題。

< iframe>的目的是什麼。 標籤?使用時的安全考慮是什麼? < iframe>的目的是什麼。 標籤?使用時的安全考慮是什麼? Mar 20, 2025 pm 06:05 PM

本文討論了< iframe>將外部內容嵌入網頁,其常見用途,安全風險以及諸如對象標籤和API等替代方案的目的。

HTML容易為初學者學習嗎? HTML容易為初學者學習嗎? Apr 07, 2025 am 12:11 AM

HTML適合初學者學習,因為它簡單易學且能快速看到成果。 1)HTML的學習曲線平緩,易於上手。 2)只需掌握基本標籤即可開始創建網頁。 3)靈活性高,可與CSS和JavaScript結合使用。 4)豐富的學習資源和現代工具支持學習過程。

See all articles