在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ javascript數(shù)值轉(zhuǎn)換問題

javascript數(shù)值轉(zhuǎn)換問題

clipboard.png

clipboard.png

js高級(jí)程序設(shè)計(jì)第三版
關(guān)于數(shù)值轉(zhuǎn)換的描述

clipboard.png

如果是NaN不行應(yīng)該執(zhí)行toString么 怎么會(huì)打印出NaN?

回答
編輯回答
撥弦
博主對(duì)這句話理解有偏差

number類型轉(zhuǎn)換

前面的規(guī)則說明了,如果是對(duì)象則調(diào)用ValueOf()方法,這時(shí)候調(diào)用valueOf()方法已經(jīng)返回'abc',然后再依照前面的規(guī)則,規(guī)則第五條,所以返回NAN

前面的規(guī)則

另外,命理難說 回答地很詳細(xì)!

2017年11月21日 06:27
編輯回答
卟乖

我的理解是這樣,希望對(duì)你有所幫助!

基本上,所有JS數(shù)據(jù)類型都擁有valueOf和toString這兩個(gè)方法,null除外。
  • 示例代碼
var box = {
        valueOf: function() {
            return 1;
        },
        toString: function() {
            return "toString";
        }
    };
console.log(Number(box)); //1
console.log(String(box)); //toString
*    當(dāng)使用`Number`時(shí),調(diào)用的其實(shí)是其內(nèi)部的`valueOf`方法,返回一個(gè)`1`,這樣`Number`本身也要對(duì)返回值進(jìn)行一次檢查,如果你返回的不是`number`類型的,當(dāng)然檢測(cè)出來就是`NaN`,當(dāng)然這個(gè)方法也可以重寫
*    使用`String`也是同上理解,不過不會(huì)出現(xiàn)`NaN`而已。
2017年7月6日 00:20
編輯回答
吃藕丑

轉(zhuǎn)換規(guī)則如下:

  1. 如果valueOf存在,且返回“基本類型”數(shù)據(jù),返回valueOf的結(jié)果。
  2. 如果toString存在,且返回“基本類型”數(shù)據(jù),返回toString的結(jié)果。
  3. 報(bào)錯(cuò)。

綜上所訴

var box = {
  valueOf() {
    console.log('調(diào)用了valueOf');
    return 'abc';
  },
  toString() {
    console.log('調(diào)用了toString');
    return '123';
  },
};
console.log(Number(box));

以上就只調(diào)用了valueOf,因?yàn)関alueOf返回的是基本類型數(shù)據(jù)。


var box = {
  valueOf() {
    console.log('調(diào)用了valueOf');
    return {};
  },
  toString() {
    console.log('調(diào)用了toString');
    return '123';
  },
};
console.log(Number(box));

以上兩個(gè)方法都調(diào)用了,因?yàn)関alueOf返回的不是基本類型,所以在調(diào)用一次toString


同理 你可以在測(cè)試一下兩個(gè)方法返回的都是復(fù)雜類型數(shù)據(jù)的時(shí)候結(jié)果是什么

2017年7月20日 00:29
編輯回答
笑浮塵
var box = {
  valueOf() {
    return 'abc';
  },
  toString() {
    return '1233';
  },
};
console.log(Number(box));

==>

var box = {
  valueOf() {
    return 'abc';
  },
  toString() {
    return '1233';
  },
};
var boxValue=Number(box);
console.log(boxValue);

Number作為普通函數(shù)調(diào)用時(shí),將執(zhí)行類型轉(zhuǎn)換
轉(zhuǎn)換規(guī)則,先調(diào)用對(duì)象的valueOf方法,如果能返回一個(gè)基本類型(原始類型),那么返回這個(gè)原始類型,再根據(jù)原始類型到number類型的轉(zhuǎn)換規(guī)則執(zhí)行轉(zhuǎn)換,不能轉(zhuǎn)換成數(shù)字,那么返回NaN。
如果valueOf不能不能返回基本類型,那么轉(zhuǎn)而去調(diào)用toString方法,如果這個(gè)方法能返回原始類型,再根據(jù)原始類型到number類型的轉(zhuǎn)換規(guī)則執(zhí)行轉(zhuǎn)換,不能轉(zhuǎn)換成數(shù)字,那么拋出類型錯(cuò)誤
Uncaught TypeError: Cannot convert object to primitive value

var box = {
  valueOf() {
    return {};
  },
  toString() {
    return {};
  },
};
var boxValue=Number(box);//Uncaught TypeError: Cannot convert object to primitive value
console.log(boxValue);
2018年9月23日 19:20