亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript中3個需要注意的運(yùn)算符

 更新時間:2015年04月02日 10:24:01   投稿:junjie  
這篇文章主要介紹了Javascript中3個需要注意的運(yùn)算符,這3個運(yùn)算符的使用有很多需要注意的地方和有意思的地方,需要的朋友可以參考下

平時寫慣了C#,所以會覺得什么樣的運(yùn)算符就應(yīng)該做什么樣的運(yùn)算,但是有一天你的習(xí)慣被其他語言顛覆了,不知道是不是有一股強(qiáng)大的好奇

心,剛好在js中,我的這種習(xí)慣就被顛覆了,下面就看看哪些運(yùn)算符顛覆了我的三觀。

一:==運(yùn)算符

  ==運(yùn)算符之所以可以顛覆,可以從下面幾個例子中看出來。

<1> "10"==10 ?

  如果這要是放在C#里面,編譯器會毫不客氣的告訴你,王八羔子,類型都不同,你比個毛線啊。。。但是在JS里面又會是怎樣呢?

從上圖中,你可以看到,不管你好奇不好奇,答案就在那里,可能有人就要問,到底是10轉(zhuǎn)化成了“10”,還是“10”被轉(zhuǎn)化成了10,所以這個也

是我一直吐槽的地方,如果是C#,你還可以看看IL里面到底怎么處理的,而JS里面你什么都看不到,只能聽教科書上的一面之詞,無法眼見為實(shí)。

所以除了記住就是記住了,我只能說是字符串”10“轉(zhuǎn)換成了10,然后進(jìn)行整形比較的。

<2>true==1 ?

這個問題稍微想想還能理解,其實(shí)在C#的IL中,也是將true和false相應(yīng)的轉(zhuǎn)化為1和0,所以js在判斷時會將true轉(zhuǎn)化為1,再進(jìn)行整形比較,這

個現(xiàn)象我覺得不怎么稀奇,記住就好。

 

<3> {valueOf:function(){return "10"}}==10?

這個問題也是蠻奇葩的,對象居然還可以和int類型相比較?但是在JS中卻真的可以做到,原理是這樣的,如果一個對象和int/string比較的話,

js內(nèi)部會優(yōu)先調(diào)用valueOf方法,也就是將對象數(shù)值化,其實(shí)這里好玩的地方就是我們自定義的valueOf重寫了父類的valueOf方法,所以上面

的例子就是判斷“10”==10?。

這里還要PS一下,如果你的類中沒有定義valueOf方法的話,js內(nèi)部引擎還會再去找toString()方法,如果有則執(zhí)行。

不知道當(dāng)你接觸到這些新用法的時候,是不是覺得有點(diǎn)慌亂,好像有種亂七八糟的感覺?如果你很怕程序有潛在的bug,那么為了保險(xiǎn)起見,

轉(zhuǎn)化為同一數(shù)據(jù)類型來比較吧,當(dāng)然在js里面還有一個===運(yùn)算符可以說跟C#里面的邏輯運(yùn)算符算是最接近的,這個多出來的“=”就是在

“==”的基礎(chǔ)上再判斷類型是否相等?就比如:

二:&&和||運(yùn)算符

 這兩個運(yùn)算符也是蠻奇葩的,在我們的思維習(xí)慣里面,這兩個運(yùn)算符兩邊就應(yīng)該都是bool類型,但是在JS里面這些定義會被徹底顛覆,正是這些新規(guī)則,所以我們可以完成很多新花樣,比如在jquery的源碼中,可以到處都能找到這樣的痕跡。

從圖中我們看到了這么一句,bup=b && b.parentNode,你能理解這句話的意思嗎?其實(shí)它的意思是先判斷b是否存在,如果b不存在,那

可能b就是undefined,null,0 或者NaN,如果b存在,那么就返回m.parentNode,就這么好玩,如果你用C#的話,就少不了幾個if條件了,

也算是簡化代碼吧,然后再看看||操作,這個簡直在源碼里面可以用泛濫來形容了,不過乍一看,特別像是C#中的可空運(yùn)算符,所以親切感倍

增,下面就拿ret=results||[]來說,如果results有值,那么ret=results,如果results為null,undefined,NaN或者0,那么result=[],就

這樣的任性,省去了程序員很多if判斷,最后要補(bǔ)充一句,其實(shí)就像C#的IL中一樣,只是JS底層給我們做了if判斷。

相關(guān)文章

  • JavaScript小技巧 2.5 則

    JavaScript小技巧 2.5 則

    在上一篇文章中的(偽)Lambda模塊中使用了幾個小技巧,現(xiàn)在我就把這幾個小技巧介紹一下
    2010-09-09
  • js時間比較 js計(jì)算時間差的簡單實(shí)現(xiàn)方法

    js時間比較 js計(jì)算時間差的簡單實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s時間比較 js計(jì)算時間差的簡單實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • IE event.srcElement和FF event.target 功能比較

    IE event.srcElement和FF event.target 功能比較

    可以捕獲當(dāng)前事件作用的對象,如event.srcElement.tagName可以捕獲活動標(biāo)記名稱。
    2010-03-03
  • js 轉(zhuǎn)義字符及URI編碼詳解

    js 轉(zhuǎn)義字符及URI編碼詳解

    本文主要介紹了轉(zhuǎn)義字符及URI編碼的相關(guān)知識,具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • javascript筆記之匿名函數(shù)和閉包

    javascript筆記之匿名函數(shù)和閉包

    這篇文章主要為大家詳細(xì)介紹了javascript筆記之匿名函數(shù)和閉包的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 原生js仿jquery一些常用方法(必看篇)

    原生js仿jquery一些常用方法(必看篇)

    下面小編就為大家?guī)硪黄鷍s仿jquery一些常用方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 微信小程序自定義tabbar欄實(shí)現(xiàn)過程講解

    微信小程序自定義tabbar欄實(shí)現(xiàn)過程講解

    tabBar相對而言用的還是比較多的,但是用起來并沒有難,下面這篇文章主要給大家介紹了關(guān)于微信小程序全局配置之tabBar的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Fuse.js模糊查詢算法學(xué)習(xí)指南

    Fuse.js模糊查詢算法學(xué)習(xí)指南

    這篇文章主要為大家介紹了Fuse.js模糊查詢算法學(xué)習(xí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • javascript中for...of和for..in循環(huán)的區(qū)別

    javascript中for...of和for..in循環(huán)的區(qū)別

    JS中循環(huán)語句眾多,你是否也有用的時候突然不知道用哪個的經(jīng)歷,本文主要介紹了javascript中for...of和for..in循環(huán)的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Bootstrap fileinput文件上傳預(yù)覽插件使用詳解

    Bootstrap fileinput文件上傳預(yù)覽插件使用詳解

    這篇文章主要為大家詳細(xì)介紹了Bootstrap fileinput文件上傳預(yù)覽插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論