手机版

JS中声明Number的五种未知方法的简要概述

时间:2021-10-19 来源:互联网 编辑:宝哥软件园 浏览:

在群里和一个卖萌90的叫的年轻人聊天,是it男的坏习惯。聊天时,他谈论技术。萧芳芳突然问了一句。声明一个数字类型的变量。我看到三种。有什么区别?复制代码如下: var num=123//方法一var num=Number(123);var num=新数字(123);2.方法1显然是一个文字数字。对于毛平,我们可以直接在上面调用各种方法,如下:复制代码如下: var num=123console . log(num . tostring());我嘴角挂着微笑:你还有点年轻,至少有三个,但我至少认识五个!笑着笑着,嘴角开始抽动,太阳穴开始冒冷汗:至少有五种,是的,但是。有什么区别?带着老菜鸟特有的矜持和骄傲,不屑地说:这个我不知道,我自己查资料。转身开始翻ECMAS-262(第五版)。一种或五种声明数值型变量的方式复制如下: //第一种方式:最常见的方式是通过文字数声明var num=123//模式2:偶尔,大多数情况下,字符串转换为数字var num=Number(123);//模式3:很少使用,包括犀牛在内的所有神书都被列为非推荐模式var num=new Number(123);//模式4:神模式,至今没有人用过var num=new Object(123);//方法五:更离奇,更离奇var num=Object(123);可以看出,后五种声明方法中,第一种不用多说,但通常是这样使用的;这三种方式和这五种方式属于比较使用,下面将分别说明:1。五种申报方式有什么区别?你用颤抖的手指敲下代码后发生了什么?2.模式一的声明显然不是对象,但是为什么我们通常可以在上面调用方法,比如toString?二、各种申报方式的区别:var num=123EC5描述:数字文字代表数字类型的值。该值分两步确定:首先,从文字推导出数学值(mv );其次,该数学值按如下所述进行舍入/.个人总结总结:1。分析变量的值,比如取出整数部分和小数部分,因为数字的声明方式也可以是num=.123。Num=123e4等。2.以解析值的近似值为例,num=123.33333333333333333333333333.此时需要取近似值,但如果取近似值则规则不会扩展。EC5说明:15.7.1作为函数调用的number构造函数当number作为高于作为构造函数的函数调用时,它执行类型转换。15.7.1.1数字([值])返回由数字(值)计算的数字值(不是数字对象)。如果提供了值,则返回0。个人总结总结:1。在这里,Number只是作为一个普通函数被调用,而不是构造函数,所以它不是一个对象,而是一个简单的数值。2.本质与第一种方法相同;与第一种方法相比,与第一种方法的不同之处在于需要对传入参数的类型进行不同的类型转换过程,具体规则如下:

方式三:var num=新数字(123);EC5说明:15.7.2数字构造函数当数字作为新表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象。15.7.2.1新数字([值])新构造的对象的[[原型]]内部属性被设置为原始数字原型对象,即数字原型(15.7.3.1)的初始值。新构造的对象的[[类]]内部属性设置为"数字"。如果提供了值,新构造的对象的[[PrimitiveValue]]内部属性设置为数字(值),否则设置为0。新构造的对象的[[可扩展]]内部属性设置为真。个人总结摘要: 1.此处将数字作用构造方法调用,返回的是数字类型的对象,该对象能够访问数字的原型属性以及方法;这样说可能有些迷惑,后面会说到复制代码代码如下: var num=新数字(123);控制台。日志(编号的类型);//输出:对象控制台。日志(对象。原型。tostring。call(num));//输出:[对象编号] 3。返回的数字类型对象内部的原始值([[PrimitiveValue]]),为经过类型转换后获得的数字值,具体转换规则与方式二提到的一致方式四:var num=新对象(123);EC5说明:15.2.2对象构造函数当对象作为新表达式的一部分被调用时,它是一个可以创建对象的构造函数。15.2.2.1新对象([值])当对象构造函数在没有参数或只有一个参数值的情况下被调用时,执行以下步骤: 1。如果提供值,则为。如果类型(值)为对象,则为1。如果该值是本机脚本对象,不要创建新对象,而只需返回值。2.如果该值是宿主对象,则采取操作并以依赖于实现的方式返回结果,这可能取决于宿主对象。如果类型(值)是字符串,则返回对象(值)。如果类型(值)是布尔值,则返回到对象(值)。如果类型(值)是数字,返回到对象(值)。2.Assert:未提供参数值或其类型为空或未定义。3.让目标文件成为一个新创建的原生脚本对象。4.将对象的[[原型]]内部属性设置为标准内置对象原型对象(15.2.4)。5.将对象的[[类]]内部属性设置为"对象"。6.将对象的[[可扩展]]内部属性设置为真。7.按照8.12中的规定设置目标文件的所有内部方法。8.返回对象。个人理解说明:上面洋洋洒洒的贴了好多文字,可能看着有些头疼,因为通过新对象(参数)这种方式声明变量,根据传入参数具体类型的不同,得到的结果也会有区别,比如说数据类型。这里面具体转换的规则,可以忽略不计,我们只看我们目前关系的部分,即上面标红色的文字,要点有: 1.传递了参数,且参数是一个数字,则创建并返回一个数字类型的对象—— 没错,其实等同于方式三2.该数字对象的值等于传入的参数,内部的[[原型]]属性指向数字。原型方式五:var num=Object(123);EC5说明:15.2.1作为函数调用的对象构造函数当对象作为函数而不是构造函数调用时,它会执行类型转换。15.2.1.1对象([值])当在没有参数或只有一个参数值的情况下调用对象函数时,将执行以下步骤: 1。如果值为空、未定义或未提供,则创建并返回一个新的对象对象,就像使用相同的参数调用标准内置对象构造函数一样(15.2.2.1)。2.返回到对象(值)。个人理解说明: 1.当传入的参数为空、未定义或空时,等同于新对象(参数),参数为用户传入的参数2.否则,返回一个对象,至于具体转换成的对象类型,可参见下表;具体到上面的例子,本质等同于新号码(123):

3.复制简单测试用例的代码如下: var num=Object(123);console . log(num的类型);//输出:object console . log(object . prototype . tostring . call(num));//输出:【对象号】三。var num=123而var num=new Number(123);圣贤告诫我们最好用第一种方法,理由如下:打地板:效率低下,eval(num)期间可能会出现意外情况。巴拉把上面的噪音放在一边。这里要注意的是为什么下面的语句不能出错:复制代码如下: var num=123console . log(num . tostring(num));//输出:‘123’,没有错误。不就是普通的用文字方式声明的数值型,不是对象吗?但不是对象的toString方法调用,不科学!嗯,查了犀牛书之后,我找到了答案:当用户字面上声明一个变量,并在这个变量上调用toString等方法时,JS脚本引擎会偷偷创建一个与这个变量对应的包装器对象,并在这个对象上调用对应的方法;调用完成后,对象被销毁;这个过程用户是看不到的,所以很多初学者在这方面会比较困惑。好的,我承认上面这段不是原文内容,只是我个人对《犀牛书》中对应段落的理解,为了显得更专业更权威,我特意加了引号。上面的例子可以简单的看作是下面的过程:复制代码如下: var num=123var tmp=num数字=新数字;console . log(num . tostring(num));num=tmp(因为昨晚把说明书翻到了1点,真的很困,所以很懒。我相信犀牛书不会坑我的。)四是后面用Javascript写的变量声明方法和类型判断,一直觉得吐不出来。对于初学者来说,以上内容无异于破坏三观;即使是像我这样使用Javascript两年多的老菜鸟,也经常会感到困惑。简单总结一下:1。模式1和模式2基本相同;2.模式3、模式4和模式5本质上是相同的。最后,如果本文中的例子有任何错误或遗漏,请指出。如果觉得文章对你有用,可以点击“推荐”:)。

版权声明:JS中声明Number的五种未知方法的简要概述是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。