国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

cheng10 / 2450人閱讀

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

前言

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

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()方法來判斷一個對象的屬性是否可以重寫。

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

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

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

注意:所以a一定要是對象,如果a是非對象的其他基本類型如String,,被視為凍結對象,不能重寫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

根據 MDN Web 文檔-運算符優先級:[https://developer.mozilla.org...
](https://developer.mozilla.org...

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

第三步 a==3為True

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

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

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

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

這時x已經為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==3Truea==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 .. :)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97976.html

相關文章

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

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

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

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

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

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

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

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

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

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

    DrizzleX 評論0 收藏0

發表評論

0條評論

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