成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js雙等號探索(二): a==3&&a==4 為true ?

cheng10 / 2448人閱讀

摘要:前言為是可以實現(xiàn)的。在中,非對象參數(shù)將被視為一個凍結(jié)的普通對象,因此會返回。注意所以一定要是對象,如果是非對象的其他基本類型如,,被視為凍結(jié)對象,不能重寫,則不起效果。第四步為這時已經(jīng)為,運行返回值也為。最后為如上所示為,為,則為其他鏈接

前言

a==3 && a==4True是可以實現(xiàn)的。
具體代碼如下所示:

let a=[];
var x=3;
a.valueOf=()=>{
   return x++
};
a==3 && a==4 ? console.log("succeed") : console.log("failed");
//succeed

下面妹子我將一一解析其原理。

第一步 let a=[]

定義一個變量a,并賦值一個對象,方便后面重寫它的valueOf方法。
可以通過Object.isFrozen()方法來判斷一個對象的屬性是否可以重寫。

根據(jù) MDN Web 文檔-Object.isFrozen():https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen

在 ES5 中,如果參數(shù)不是一個對象類型,將拋出一個TypeError異常。在 ES2015 中,非對象參數(shù)將被視為一個凍結(jié)的普通對象,因此會返回true。
Object.isFrozen("");
// true                         (ES2015 code)

Object.isFrozen({});
// false                        (ES2015 code)

注意:所以a一定要是對象,如果a是非對象的其他基本類型如String,,被視為凍結(jié)對象,不能重寫valueOf,則不起效果。

let a=""; //非對象
var x=3;
a.valueOf=()=>{
   return x++
};
a==3 && a==4 ? console.log("succeed") : console.log("failed");
//failed
第二步 a==3 && a==4

根據(jù) MDN Web 文檔-運算符優(yōu)先級:[https://developer.mozilla.org...
](https://developer.mozilla.org...

==的優(yōu)先級為10 ,&&的優(yōu)先級為6,==的優(yōu)先級更高,所以先運行a==3,再運行a==3,最后進行&&判斷。

第三步 a==3為True

根據(jù) MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

如果一個對象與數(shù)字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉(zhuǎn)換為其原始值(一個字符串或數(shù)字類型的值)。

所以將會運行a.valueOf(),x1。

let a=[];
var x=3;
a.valueOf=()=>{
   return x++
};
if(a==3){
  console.log(x); 
}
//4
第四步 a==4為True

這時x已經(jīng)為4,運行a.valueOf返回值也為4

let a=[];
var x=3;
a.valueOf=()=>{
   return x++
};
if(a==3){
  console.log(x); 
}
//4
if(a==4){
  console.log(x); 
}
//5
最后a==3 && a==4 為true

如上所示a==3True,a==4True,則true && trueTrue

let a=[];
var x=3;
a.valueOf=()=>{
   return x++
};
a==3 && a==4 ? console.log("succeed") : console.log("failed");
//succeed
其他鏈接

https://raoenhui.github.io/js/2018/09/22/compare1/

https://raoenhui.github.io/js/2018/09/23/compare2/

https://raoenhui.github.io/js/2018/09/28/compare3/

Happy coding .. :)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/97976.html

相關文章

  • 解析JavaScript判斷兩個值相等的方法

      本篇文章主要是講述在JavaScript中判斷兩個值相等,不要認為很簡單,要注意的是在JavaScript中存在4種不同的相等邏輯。  ECMAScript 是 JavaScript 的語言規(guī)范,在ECMAScript 規(guī)范中存在四種相等算法,如下圖所示:  上圖中每個依次寫下來,很多前端應該熟悉嚴格相等和非嚴格相等,但對于同值零和同值卻不熟悉,現(xiàn)在就依次下面四種方法?! ⊥怠 ⊥盗恪 》?..

    3403771864 評論0 收藏0
  • velocity的基本使用 && 實例講解

    摘要:的簡介是一個基于的模板引擎。使用,也可以寫成。所以,應該使用規(guī)范的格式書寫現(xiàn)在知道變量是而不是。如當頁面中包含,如果對象有值,將顯示的值,如果不存在對象同,則在頁面中將顯示字符。 velocity的簡介 Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,...

    zhunjiee 評論0 收藏0
  • velocity的基本使用 && 實例講解

    摘要:的簡介是一個基于的模板引擎。使用,也可以寫成。所以,應該使用規(guī)范的格式書寫現(xiàn)在知道變量是而不是。如當頁面中包含,如果對象有值,將顯示的值,如果不存在對象同,則在頁面中將顯示字符。 velocity的簡介 Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象,...

    scq000 評論0 收藏0
  • 解析ES6變量賦值和基本數(shù)據(jù)類型

      let和const  let和const兩者并不存在變量提升  這里要說明的是變量一定要在聲明后使用,否則報錯。  vara=[];   for(vari=0;i<10;i++){   a[i]=function(){   console.log(i);   };   }   a[6]();//10  變量i是var聲明的,我們要知道這里在全局范圍內(nèi)都有效。我們要知道在每一次循環(huán)中,新的...

    3403771864 評論0 收藏0
  • js等號探索(三): [] == falseTrue,而!![] == falseFalse

    摘要:所以為為第二步轉(zhuǎn)成根據(jù)文檔比較操作符如果一個對象與數(shù)字或字符串相比較,會嘗試返回對象的默認值。嘗試將數(shù)字字面量轉(zhuǎn)換為數(shù)字類型的值。 [] == false; //為True !![] == false; //為False 一、[] == false為True 第一步 轉(zhuǎn)成[] == 0 根據(jù) MDN Web 文檔-比較操作符:https://developer.mozilla.org...

    DrizzleX 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<