JS數據類型之問---轉換篇

[]==![]的結果是什麼?爲何?

結果是:true segmentfault

ECMAScripth中 相等操做符==,若是兩個操做數相等,則返回true,然而這種操做符會先強制轉換操做數,再比較相等性

基本的轉換規則數組

  • 若是有一個操做數是布爾值,則在比較相等性以前先將其轉換爲數值——false轉換爲0,而true轉換爲1
  • 若是一個操做數是字符串,另外一個操做數是數值,在比較相等性以前先將字符串轉換爲數值
  • 若是一個操做數是對象,另外一個操做數不是,則調用對象的valueOf()方法,用獲得的基本類型值按照前面的規則進行比較

關於本題bash

  • 根據運算符優先級,!的優先級大於==,因此先執行![],而可將變量轉換成布爾類型,nullundefinedNaN以及空字符串('')取反都爲true,其他都爲false。因此![]的運算結果爲false
  • 題目變成了[]==false ,根據上面的規則,會把false轉換成0
  • 而若是一個操做數是對象,另外一個操做數不是,則調用對象的valueOf()方法,用獲得的基本類型值按照前面的規則進行比較,若是對象沒有valueOf()方法,則調用toString()
  • 對於空數組,[].toString() -> " "(空字符串)
  • 也就是 " "== 0 一個是字符串,另外一個是數值,則比較以前轉換爲數值
  • 獲得0==0 ,返回true
  • [] == ! [] -> [] == false -> [] == 0 -> '' == 0 -> 0 == 0 -> true

==和===的區別

而若是這裏的「==」換成「===」 spa

能夠獲得:code

  • 相等和不相等——先轉換再比較 (==)
  • 全等和不全等——僅比較而不轉換 (===)

JS中類型轉換有幾種?

1、JS顯式數據類型轉換cdn

  • 轉數字(Number類型)
// Number 轉換 
var a = '123';
a = Number(a);

//parselnt轉換
var a = '123';
a = Number(a

//parseFloat轉換,與parseInt同樣,區別是能夠保留小數
複製代碼
  • 轉字符串(String)
//String()
var a = 123;a = String(a);

//toString()
var a = 123; 
a = a.toString();    //undefined,null不能用toString。
複製代碼
  • 轉布爾類型(Boolean)
var a ='true';
a = Boolean(a);

// 在進行boolean轉換的時候全部的內容在轉換之後結果都是true
//除了:false、」「(空字符串)、0、NaN、undefined,這幾個爲true
複製代碼

2、JS隱式數據轉換對象

  • Number
var a = '123';
a=+a;
//加減乘除以及最餘均可以讓字符串隱式轉換成number。
複製代碼
  • String
var a = 123;
a = a + '';
複製代碼
  • boolean
var a = 123;
a = !!a;
複製代碼

3、JS值類型之間的數據類型轉換blog

  • 數字和字符串使用+運算符
//數字和字符串若是使用+運算符進行操做,那麼會將數字先轉換爲字符串,而後進行 
字符串鏈接操做:
var text = 'asd';
var num = 123;
alert(text+num);
複製代碼
  • 布爾值參與的+運算符操做
//若是有布爾型參與,那麼首先會將布爾值轉換爲對應的數字或者字符串,而後再進行相應的 
字符串鏈接或者算數運算。
var bool = true;
var num = 8;
console.log(bool + num); -> 8

var bool = true;
var num = "8";
console.log(bool + num); -> true8
複製代碼
  • 減法操做
//若是進行減法操做,那麼兩個操做數都會先被轉換爲數字,而後在進行算數運算
var bool = true;
var num = "8";
console.log(bool - num);  -> -7 
複製代碼
  • ==等性運算
//undefined和null比較特殊,它們兩個使用==運算符返回值是true
console.log(undefined==null); -> true

//其餘值類型進行比較的時候都會將運算數轉換爲數字
console.log("3"==3);

複製代碼

對象轉原始類型是根據什麼流程運行的?

對象轉原始類型總結 來自CSDNip

相關文章
相關標籤/搜索