1. 程式人生 > >javascript 中關於物件轉換數字值的一些特點

javascript 中關於物件轉換數字值的一些特點

下面是摘至<Javascript 高階程式設計第三版>裡的一段話

是關於物件轉換數字值的一些規則

"在應用於物件時,先呼叫物件的valueOf()方法以取得一個可供操作的值。然後對該值應用前述規則。如果結果是NaN,則在呼叫toString()方法後再應用前述規則...."

通過上面的描述,我們知道,當需要把物件轉換成數字值時,先呼叫valueOf方法,假如返回NaN,則再呼叫物件的toString方法。

所以寫了下面的測試程式碼.

var a={
	valueOf:function(){
		return "admin";
	},
	toString:function(){
		return "2";
	}
}

var b={
	toString:function(){
		return "2";
	}
}

var c={
	valueOf:function(){
		return "4";
	}
}

console.log(+a); // print NaN
console.log(+b); // print 2
console.log(+c); // print 4

  經測試發現,只要valueOf和toString方法同時存在的時候,只會按valueOf的返回值來轉換數字值,哪怕toString方法可以返回數字,結果也是NaN

,測試的瀏覽器資訊為

Google Chrome 31.0.1650.63 (正式版本 238485m
作業系統 Windows 
Blink
JavaScript V8 3.21.18.13

不知道這是不是chrome的一個改進,還是什麼,特記錄下來,方便給別人參考。

相關推薦

javascript 關於物件轉換數字一些特點

下面是摘至<Javascript 高階程式設計第三版>裡的一段話 是關於物件轉換數字值的一些規則 "在應用於物件時,先呼叫物件的valueOf()方法以取得一個可供操作的值。然後對該值應用前述規則。如果結果是NaN,則在呼叫toString()方法後再應用前述規則...." 通過上面的描

JavaScript物件轉換為原始的步驟

首先附加一張JavaScript型別轉換表 值轉換為字串數字布林值物件 undefined“undefined”NaNfalsethrows TypeError null“null”0falsethrows TypeEr

JavaScript物件屬性通過點(.)和方括號([])取的不同之處

JavaScript中物件屬性通過點(.)和方括號([])取值的不同之處 1、點操作符: 靜態的。右側必須是一個以屬性名稱命名的簡單識別符號。屬性名用一個識別符號來表示。識別符號必須直接出現再js程式中,它們不是資料型別,因此程式無法修改它們。 2、中括號操作符: 動態的。方括號裡必

javascript onclick事件傳遞物件引數和JavaScript物件字串轉換

支援原創,原文連結 var user = {id:1, name:'zs', age:20}; var ele = '<a onclick="edit(' + JSON.stringify(user).replace(/"/g, '&quot;'

javaScript奇葩的假

http java color false javascrip fin sna 沒有 spa JavaScript中有 6 個值為“假”,這六個值是: false null undefined 0 ‘‘(空字符串) NaN 這裏面 false 本身是布爾類型,其它 5

JavaScript判斷兩個是否相等(各種情況)

學的還沒有那麼深,有錯誤或者我的理解有問題的話還請告訴我,謝謝   1、一般情況下,將兩邊儘可能都轉為number型別資料,再進行比較,而不是轉為Boolean型 console.log(true==2);   // false   如果兩邊都

Javascript物件深拷貝的應用

javascript中的物件的深拷貝 關於Javascript的物件的深淺拷貝網上有很多的說明文件。 詳見:js深拷貝和淺拷貝 下面說明下我遇到的業務場景,由於框架的限制,在每次開啟模態頁面的時候,框架會自動將我賦予模態頁面的物件的屬性改變,而框架對於屬性的名稱是嚴格要求的。

如何刪除JavaScript物件的屬性

刪除JavaScript物件的屬性 在開發中我們有時候可能需要刪除JavaScript物件中的某些屬性,這時候可以用delete來進行刪除屬性的操作,具體驗證可以參見以下的程式碼: delete [物件].[屬性] 驗證程式碼: let obj = { id

[轉] 小程式修改陣列物件的某個或者修改物件

小程式中獲取當前data定義的值,用this.data.xxx setData的時候要修改的值是不需要加this.data.xxx的,直接xxx, 一般直接修改data的值直接修改,修改陣列中物件的值或者物件的屬性值都要先轉為字串再加中括號,如果有變數可以用ES6的模版字串反單引號或者字串拼接一下。

如何理解JavaScript的引數按傳遞

開始之前先說一下 ES 中的兩種資料型別的值:基本型別值和引用型別值。 基本資料型別:Undefined、Null、Boolean、Number、String。 引用資料型別的值是儲存在記憶體中的物件。與其他語言不同,JavaScript 不允許直接訪問記憶體中的位置,也就是說不能直

深入理解 JavaScript的變數、、傳參

1. demo 如果你對下面的程式碼沒有任何疑問就能自信的回答出輸出的內容,那麼本篇文章就不值得你浪費時間了。 var var1 = 1 var var2 = true var var3 = [1,2,3] var var4 = var3 function test (var1, var3) {

微信小程式 互動過程物件陣列賦

舉個例子 這個留言框在wxml頁面只寫了一個 但是如果是多店鋪的購買 他就會迴圈出現多次  每次輸入店鋪留言 只會儲存最後一個input的內容但是後臺要拿到多個內容 <!-- 留言 --> <view class='conten

javascript物件的屬性名為變數的場景

今天幫夥伴解決一個問題,開發功能中物件的屬性名是一個變數。按照他編寫的程式碼賦值後的物件,直接將變數名作為了屬性名。以下是其編寫程式碼: var aa = "ok"; var bb = "no"; var obj = {aa:bb}; console.log(obj);

javascript物件的assign()方法

javascript中物件的assign()方法 Object.assign() 方法用於將所有可列舉屬性的值從一個或多個源物件複製到目標物件。它將返回目標物件。 語法: Object.assign(target,...sources) 引數: target:新物件,用

javaScript物件的遍歷和物件屬性的刪除

1、物件的遍歷使用for in 注意:不是使用for迴圈來遍歷,因為物件的屬性是無序的 for(var key in obj) { console.log(key + "==》" + obj[key]); } 2、刪除物件裡面的某個屬性 var obj = {

關於Oracle查詢的數字的顯示格式需要保留小數點後兩位(或者三位,及其他位數)

方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999999999999999.00') as amount 不足之處是,如果數值是0的話,會顯示為.00而不是0.00。 另一需要注意的是,格式中小數點左邊9的個數要夠多,否則查詢的數字會顯示為n

javascript物件的屬性的特性

enumberable: 表示是否能通過for-in迴圈返回屬性。預設為true writable: 是否可以修改屬性, 預設為true value: 包含這個屬性的資料值。讀取屬性值時3,從這個屬性讀,寫入屬性時,把新值儲存到這個位置。預設值為undefine. getter: 在讀取屬性時,呼叫的函式

JavaScript 物件的深拷貝

在JavaScript中,對物件進行拷貝的場景比較常見。但是簡單的複製語句只能對物件進行淺拷貝,即複製的是一份引用,而不是它所引用的物件。而更多的時候,我們希望對物件進行深拷貝,避免原始物件被無意修改。物件的深拷貝與淺拷貝的區別如下:淺拷貝:僅僅複製物件的引用,

PHP物件是按傳遞還是按引用傳遞?

1.首先,什麼是按值傳遞和按引用傳遞?按值傳遞就是僅僅把值傳遞過去,相當於傳遞的是值的拷貝,而按引用傳遞傳遞的是記憶體的地址。在 PHP5 中,如果按引用傳遞,就是將 zval 的地址賦給另一個變數,這

mysql在儲存過程字串轉換數字

公司的需求,需要根據使用者的設定的百分比去查詢資料。當時純真的以為可以 -- set @a_value=`CONVERT`(@a_value,DOUBLE); 但是會出現錯誤,百度了一下,原來convert不支援轉化為double 只能轉換以下型別 二進位制,同帶binar