亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS中不為人知的五種聲明Number的方式簡要概述

2019-11-20 22:59:21
字體:
供稿:網(wǎng)友
跟小組里一自稱小方方的賣萌90小青年聊天,IT男的壞習慣,聊著聊著就扯到技術(shù)上去了,小方方突然問
1、聲明一個數(shù)值類型的變量我看到三種,區(qū)別在哪:
復制代碼 代碼如下:

var num = 123; //方式一
var num = Number(123);
var num = new Number(123);

2、方式一明明是個數(shù)字字面量,為毛平常我們可以直接在上面調(diào)用各種方法,如下:
復制代碼 代碼如下:

var num = 123;
console.log(num.toString());

我嘴角微微一笑:少年你還嫩了點,哪止三種,我知道的至少有五種?。?
笑著笑著嘴角開始抽搐,額角開始冒出了冷汗:至少有五種,沒錯,但是。。。區(qū)別在哪。。。
懷著老菜鳥特有的矜持和驕傲,我不屑地說:這都不知道,自己查資料去。。。轉(zhuǎn)過身,開始翻ECMAS - 262(第五版)

一、五種聲明數(shù)值類型變量的方式
復制代碼 代碼如下:

//方式一:最常見的方式,通過數(shù)字字面量方式聲明
var num = 123;
//方式二:偶爾使用方式,大部分情況下是將字符串轉(zhuǎn)成數(shù)字
var num = Number(123);
//方式三:很少使用,各神書,包括犀牛書,都將其列入不推薦方式
var num = new Number(123);
//方式四:神方式,目前還沒見過人使用
var num = new Object(123);
//方式五:更離奇,更詭異
var num = Object(123);

可以看到,在上5種聲明方式種,方式一不用怎么說了,平常都是這樣用的;方式三 to 方式五屬于比較的使用,下文會分別說明:
1.五種聲明方式的區(qū)別?當你用顫巍巍的手指敲下代碼后,究竟發(fā)生了神馬?
2.方式一聲明的明明不是對象,但為什么平常我們可以在上面調(diào)用方法,如toString等?

二、各種聲明方式之間的區(qū)別
方式一:var num = 123
;
EC5說明:
A numeric literal stands for a value of the Number type. This value is determined in two steps: first, a mathematical value (MV) is derived from the literal; second, this mathematical value is rounded as described below
//.....個人總結(jié)摘要:
1.解析變量的值,比如說取出整數(shù)部分、小數(shù)部分等,因為數(shù)字聲明方式還可以為num = .123,num = 123e4等形式
2.對解析出來的值取近似值,比如num = 123.33333333333333...3333333333333333333333333....,這個時候就要取近似值了,具體取近似則規(guī)則不展開
3.此種方式聲明的變量,只是個簡單的數(shù)字字面量,并不是對象(至于為什么可以在上面調(diào)用toString等方法,后文講解)
方式二:var num = Number(123);
EC5說明:
15.7.1 The Number Constructor Called as a Function
When Number is called as a function rather than as a constructor, it performs a type conversion. 15.7.1.1 Number ( [ value ] )
Returns a Number value (not a Number object) computed by ToNumber(value) if value was supplied, else returns +0.個人總結(jié)摘要:
1.此處只是將Number當作一個普通的函數(shù)來調(diào)用,而不是構(gòu)造方法,因此返回的不是對象,而是一個簡單的數(shù)值
2.本質(zhì)與方式一相同;相對于方式一的區(qū)別在于,需要針對傳入?yún)?shù)的類型,執(zhí)行不同的類型轉(zhuǎn)換過程,試圖將參數(shù)解析成對應(yīng)的數(shù)值,具體規(guī)則如下:
 
方式三:var num = new Number(123);
EC5說明:
15.7.2 The Number Constructor
When Number is called as part of a new expression it is a constructor: it initialises the newly created object. 15.7.2.1 new Number ( [ value ] )
The [[Prototype]] internal property of the newly constructed object is set to the original Number prototype object, the one that is the initial value of Number.prototype (15.7.3.1).
The [[Class]] internal property of the newly constructed object is set to "Number".
The [[PrimitiveValue]] internal property of the newly constructed object is set to ToNumber(value) if value was
supplied, else to +0.
The [[Extensible]] internal property of the newly constructed object is set to true.個人總結(jié)摘要:
1.此處將Number作用構(gòu)造方法調(diào)用,返回的是Number類型的對象,該對象能夠訪問Number的原型屬性以及方法;這樣說可能有些迷惑,后面會說到
復制代碼 代碼如下:

var num = new Number(123);
console.log(typeof num); //輸出:object
console.log(Object.prototype.toString.call(num)); //輸出:[object Number]

3.返回的Number類型對象內(nèi)部的原始值( [[PrimitiveValue]]),為經(jīng)過類型轉(zhuǎn)換后獲得的數(shù)字值,具體轉(zhuǎn)換規(guī)則與方式二提到的一致

方式四:var num = new Object(123);
EC5說明:
15.2.2 The Object Constructor
When Object is called as part of a new expression, it is a constructor that may create an object.
15.2.2.1 new Object ( [ value ] )
When the Object constructor is called with no arguments or with one argument value, the following steps are taken:
1.If value is supplied, then
a. If Type(value) is Object, then
1.If the value is a native ECMAScript object, do not create a new object but simply return value.
2.If the value is a host object, then actions are taken and a result is returned in an implementation-dependent manner that may depend on the host object.
b. If Type(value) is String, return ToObject(value).
c. If Type(value) is Boolean, return ToObject(value).
d. If Type(value) is Number, return ToObject(value).
2.Assert: The argument value was not supplied or its type was Null or Undefined.
3.Let obj be a newly created native ECMAScript object.
4.Set the [[Prototype]] internal property of obj to the standard built-in Object prototype object (15.2.4).
5.Set the [[Class]] internal property of obj to "Object".
6.Set the [[Extensible]] internal property of obj to true.
7.Set all the internal methods of obj as specified in 8.12.
8.Return obj.
個人理解說明
  上面洋洋灑灑的貼了好多文字,可能看著有些頭疼,因為通過 new Object(param) 這種方式聲明變量,根據(jù)傳入?yún)?shù)具體類型的不同,得到的結(jié)果也會有區(qū)別,比如說數(shù)據(jù)類型。這里面具體轉(zhuǎn)換的規(guī)則,可以忽略不計,我們只看我們目前關(guān)系的部分,即上面標紅色的文字,要點有:
1.傳遞了參數(shù),且參數(shù)是一個數(shù)字,則創(chuàng)建并返回一個Number類型的對象 ―― 沒錯,其實等同于方式三
2.該Number對象的值等于傳入的參數(shù),內(nèi)部的[[prototype]]屬性指向Number.prototype
方式五:var num = Object(123);
EC5說明:
15.2.1 The Object Constructor Called as a Function
When Object is called as a function rather than as a constructor, it performs a type conversion.
15.2.1.1 Object ( [ value ] )
When the Object function is called with no arguments or with one argument value, the following steps are taken:
1.If value is null, undefined or not supplied, create and return a new Object object exactly as if the standard built-in Object constructor had been called with the same arguments (15.2.2.1).
2.Return ToObject(value).
個人理解說明
1.當傳入的參數(shù)為空、undefined或null時,等同于 new Object(param),param為用戶傳入的參數(shù)
2.否則,返回一個對象,至于具體轉(zhuǎn)換成的對象類型,可參見下表;具體到上面的例子,本質(zhì)等同于new Number(123):
 
3. 簡單測試用例
復制代碼 代碼如下:

var num = Object(123);
console.log(typeof num); //輸出:object console.log(Object.prototype.toString.call(num)); //輸出:[object Number]

三、var num = 123; 與 var num = new Number(123);
各位先賢哲們告誡我們最好用第一種方式,理由成分,擲地有聲:效率低,eval(num)的時候可能有意外的情況發(fā)生。。。巴拉巴拉
拋開上面的雜音,我們這里要關(guān)注的是,為什么下面的語句不會出錯:
復制代碼 代碼如下:

var num = 123;
console.log(num.toString(num)); //輸出:'123',竟然沒出錯

不是說字面量方式聲明的只是普通的數(shù)值類型,不是對象嗎?但不是對象哪來的toString方法調(diào)用,這不科學!
好吧,查了下犀牛書,找到了答案
當用戶通過字面量方式聲明一個變量,并在該變量上調(diào)用如toString等方法,JS腳本引擎會偷偷地創(chuàng)建該變量對應(yīng)的包裝對象,并在該對象上調(diào)用對應(yīng)的方法;當調(diào)用結(jié)束,則銷毀該對象;這個過程對于用戶來說是不可見的,因此不少初學者會有這方面的困惑。

好吧,我承認上面這段話并不是原文內(nèi)容,只是個人對犀牛書對應(yīng)段落的理解,為了顯得更加專業(yè)權(quán)威故意加了引用標識。。。上面舉的那個例子,可以簡單看作下面過程:
復制代碼 代碼如下:

var num = 123;
var tmp = num;
num = new Number(num);
console.log(num.toString(num));
num = tmp;

(因為昨晚翻規(guī)范翻到快1點,實在困的不行,就偷懶了,相信犀牛書不會坑我)

四、寫在后面
Javascript的變量聲明方式、類型判斷等,一直都覺得無力吐槽,上面的內(nèi)容對于初學者來說,無異于毀三觀;即使對于像本人這樣已經(jīng)跟Javascript廝守了兩年多的老菜鳥,經(jīng)常也被弄得稀里糊涂
簡單總結(jié)一下:
1.方式一、方式二本質(zhì)相同
2.方式三、方式四、方式五本質(zhì)相同
最后的最后:
文中示例如有錯漏,請指出;如覺得文章對您有用,可點擊“推薦” :)
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲日本电影| 成人动漫视频在线观看完整版| 不卡的看片网站| 美女露胸一区二区三区| 欧美性生活大片视频| 国产91综合一区在线观看| 国产69久久精品成人看| 亚洲AV无码成人片在线观看| 国产精品久久久久久久久果冻传媒| 欧美午夜不卡在线观看免费| 来吧亚洲综合网| 色老头视频在线观看| 日韩免费高清一区二区| 99热99这里只有精品| 国产精品无码天天爽视频| 99精品老司机免费视频| 久久久久久国产精品免费播放| 高清av一区二区| 77777亚洲午夜久久多人| 中文字幕免费精品| 99热这里只有精品在线| 深夜福利视频在线免费观看| 亚洲精品午夜久久久久久久| 国产一区二区三区四区大秀| 亚洲男人天堂九九视频| 国产黄色小视频在线| 精品在线播放| 爱情岛论坛亚洲品质自拍视频网站| 国产精品乱码久久久久久| 日本免费中文字幕在线| 二区中文字幕| 狠狠躁日日躁夜夜躁av| 黄页在线观看| 高h视频免费观看| 亚洲一区二区三区精品动漫| 中文av一区| 91精品国产综合久久久蜜臀粉嫩| 国产视频一区二区三区在线播放| 国产高清一区二区三区视频| 国产一区二区三区av电影| 97精品国产一区二区三区| 日本精品人妻无码77777| 一本久道久久综合狠狠爱亚洲精品| 伊人网在线免费观看| 成人va在线观看| 热re99久久精品国产66热| 国产精品视频一二| 91香蕉视频在线观看视频| 天天操天天插| 99久久精品无免国产免费| 亚洲天堂一区在线观看| 日韩成人短视频| 国产日韩另类视频一区| 亚洲永久精品一区| 欧美激情综合色综合啪啪| 久久激情五月丁香伊人| 国产黄色在线| 一区二区三区中文字幕电影| 18久久久久久| 在线中文字幕观看| 国产日本精品视频| 日本中文字幕一区二区| 日本黄区免费视频观看| 亚洲人成午夜免电影费观看| 久久精品蜜桃| 好吊日视频在线观看| 亚洲高清一区二区三区| 久久久久国产成人精品亚洲午夜| 日本视频一二区| 性xx十八spa按摩| 日本中文字幕不卡| 欧美一区二区在线观看| 懂色av粉嫩av蜜乳av| 国产导航在线| 国产精品午夜电影| 国产成人精品影视| 欧美国产欧美亚州国产日韩mv天天看完整| 国内精品久久久久影院薰衣草| 川上优av一区二区线观看| 国产亚洲亚洲国产一二区| 亚洲成av人片在www色猫咪| 在线观看免费国产小视频| 91美女蜜桃在线| 日韩理伦片在线| 国产精品一区二区三区av| 亚洲免费二区| 毛片在线播放a| 亚洲一区尤物| 亚洲美女视频| 天天综合网在线| 国产小视频在线观看免费| 91丨九色丨黑人外教| 在线视频毛片| aⅴ在线视频男人的天堂| 日韩精品在线观看网站| 天天躁日日躁狠狠躁欧美| 999精品在线| 国产系列电影在线播放网址| 91精品韩国| 亚洲国产精品成人一区二区在线| 欧美理伦片在线播放| 级毛片内射视频| 亚洲免费伊人电影| 4p变态网欧美系列| 男插女视频久久久| 国产伦精品一区二区三区视频免费| 这里只有精品视频在线观看| 中文资源在线播放| 精品久久久久久久久中文字幕| 91香蕉视频污版| 孩xxxx性bbbb欧美| 欧美大香线蕉线伊人久久| 久久久加勒比| 曰韩少妇与小伙激情| 日韩欧美一区二区三区四区五区| 免费看毛片的网址| 久香视频在线观看| 天天爱天天操天天干| 91免费在线视频网站| 日韩午夜激情av| 精品美女久久久| 日韩精品一区二区在线| 97香蕉超级碰碰久久免费软件| 在线播放亚洲激情| 免费全黄无遮挡裸体毛片| 美国av在线播放| 嗯~啊~轻一点视频日本在线观看| blacked蜜桃精品一区| 欧美视频在线一区| 亚洲欧美色图片| 国产三级精品三级观看| 成人在线二区| 精品无人区卡一卡二卡三乱码免费卡| 欧美激情在线观看视频免费| 91麻豆国产精品久久| 影音先锋中文字幕在线视频| 在线免费观看av影视天堂| 亚洲第一精品电影| 精品一区二区久久久| 中文一区一区三区高中清不卡| 国产黄色小视频网站| 中文字幕在线免费观看视频| 粉嫩一区二区三区国产精品| 国产精品啊啊啊| 日韩影视一区二区三区| 一区二区三区资源| 日本一区二区高清不卡| 欧美精品三区| 久久国产电影| 性高潮免费视频| 韩日在线视频| 欧美日韩破处| 日韩成人免费在线视频| 性欧美videos另类hd| 国产在线视频二区| 国产伦精品一区二区三区妓女| 免费观看成人在线视频| 麻豆一二三区精品蜜桃| 在线成人私人影院| 午夜久久久久久| 亚洲福利视频专区| 欧美日本高清一区| 国产毛片在线看| 亚洲一卡二卡三卡四卡无卡网站在线看| 亚洲网址在线观看| 一区二区三区毛片| 国产日韩欧美精品综合| 国产香蕉一区二区三区在线视频| 日韩一区二区三区在线观看| 91蜜桃免费观看视频| 国产精品短视频| 日韩亚洲欧美综合| 中文字幕一区二区三区在线视频| 亚洲精选国产| 欧美综合一区二区三区| 美女av免费观看| av亚洲在线观看| 日韩欧美伦理| 色哟哟亚洲精品| 欧美艳星介绍134位艳星| 久久精品这里都是精品| 亚洲欧美www| 黄p免费网站| av电影在线观看完整版一区二区| 18岁视频在线观看| 亚洲神马久久| 国产黑丝在线视频| 91国产精品成人| 人人妻人人澡人人爽人人欧美一区| 国产欧美一区二区三区米奇| 国产传媒欧美日韩成人精品大片| 中文字幕免费高清在线观看| 人人草在线观看| www.av麻豆| 免费黄色片视频| 可以在线看黄的网站| 欧美激情一区二区视频| 国产欧美91| 啊灬啊灬啊灬啊灬高潮在线看| 好吊色一区二区| 国产日韩欧美制服另类| 欧美13一14另类| 久久久久久久久99精品| 超碰在线无需免费| 激情视频一区| 亚洲精品国产动漫| 亚洲精品极品| 欧美做受xxxxxⅹ性视频| av在线不卡免费| 欧美三日本三级三级在线播放| 99riav视频一区二区| 国产精品久久久久久久久久10秀| 美女久久久久久久久久久| 国产美女作爱全过程免费视频| 国产91社区| 国产精品久久久影院| 日本人妻伦在线中文字幕| 久草在线官网| 久久久国产一区| 日韩欧美国产高清| 亚洲午夜精品久久久中文影院av| 日韩高清免费在线| 欧美亚洲高清| 天天影视综合| 免费看久久久| 亚洲天堂岛国片| 亚洲欧洲国产专区| 精品视频资源站| 人妻熟人中文字幕一区二区| 在线影院自拍| 91综合国产| 精品自拍视频| 欧美日韩精品免费观看视完整| 天天操夜夜操天天射| 蜜桃视频在线观看成人| 国语自产在线不卡| 午夜国产福利在线| 精品国产乱码久久久久久果冻传媒| 日本tube24xxxxx| 欧美性色xo影院| japan乱配videos老少配| 成人黄色小视频在线观看| 在线观看国产精品日韩av| 日韩精品亚洲精品| 亚洲精品乱码电影在线观看| 久久久另类综合| 久久老司机精品视频| 99中文字幕在线| 久久中文字幕视频| 精品成在人线av无码免费看| 欧美激情在线一区| 欧美亚洲福利| 97最新国自产拍视频在线完整在线看| 啪啪导航网站| 97精品超碰一区二区三区| 91亚洲午夜精品久久久久久| 欧美成人免费高清视频| 国产在线视频在线| 一级黄色性视频| 日本中文一区二区三区| 四虎免费av| av在线播放中文字幕| 亚洲精品ww久久久久久p站| 日韩在线国产| 亚洲一级生活片| 综合网中文字幕| 国产精品69久久久久水密桃| 亚洲国产高清av| 97在线播放视频| 欧美一区二区三区在线观看免费| 免费人成网ww777kkk手机| 图片区亚洲欧美小说区| 欧美视频第一| 嫩草影院视频| 亚洲色图视频免费播放| 一个色综合av| 国产小黄视频| 国产999在线观看| 91free张津瑜movies| 欧美日韩国产精品一卡| 中文字幕人成人乱码亚洲电影| 亚洲第一页在线视频| 久久黄色精品视频| 看全色黄大色黄大片免责看的| 国产精品99久久免费黑人人妻| 日韩美女天天操| 黄色网免费观看| 99久久夜色精品国产亚洲96| 欧美精品欧美精品系列| 精品国产免费视频| 欧美日韩一区二区三区免费看| 在线日本制服中文欧美| 99久久免费国产| 国内成人免费视频| 欧美激情视频免费看| 国产一区二区三区朝在线观看| 日韩欧美专区| 麻豆精品在线| 免费在线观看的av| 久久久综合视频| 久久免费视频这里只有精品| 免费人成在线观看网站| 日韩欧美一区二区在线| 粉嫩高清一区二区三区精品视频| 精品婷婷伊人一区三区三| 亚洲综合在线观看视频| 视频免费在线看| 一本色道久久综合亚洲二区三区| 欧美高清第一页| 中文字幕一区二区三区视频| 天天干人人干| 国产精品亚洲美女av网站| 成人免费看片39| 天天干人人干| 亚洲天堂777| 日韩精品电影一区二区三区| 2020国内自拍视频| 奇米影视888狠狠狠| 佐佐木明希电影| 四虎国产精品永久在线国在线| 人妻与黑人一区二区三区| 日韩国产成人无码av毛片| 电影一区二区三区久久免费观看| 欧美黑人乱大交| 一区二区三区四区精品视频| 日韩欧美第一区| 黄色一级片国产| 日韩中文字幕综合|