java中用sql语句where number=number+1_面试题:在javascript中,1与Number(1)有什么区别

其他人的回覆是正确的,我是来补充一下的。

数字、字符串、布尔三者,在JS中称为原始的(primitives)资料类型,再加上null与undefined也是。除了这些类型外,其他的都是对象。(注: ES6的Symbol是新加的原始资料类型)

包装对象

对象中有一类是Number, String, Boolean这三个对象,分别对应数字、字符串、布尔类型,我们称它们为包装对象或包装类型(Wrappers),很少会直接使用到它们,在很多情况下也尽量避免使用它们。

包装类型与原始资料类型之间的正确转换方式如下:

原始->包装: new Number(123)

包装->原始: (new Number(123)).valueOf()

包装对象是个对象,所以它与原始资料类型并不相同,用typeof与instanceof都可以检测出来:

typeof 123 // "number"

typeof new Number(123) // "object"

123 instanceof Number // false

(new Number(123)) instanceof Number // true

123 === new Number(123) // false

作为对象来进行比较,因为对象是参照的,不同的对象不可能相等:

var a = new Number(123);

var b = new Number(123);

a === b; // false

a == b; // false

var a = 123;

var b = 123;

a === b; // true

a == b; // true

原始资料类型的方法与属性是"借"来的

一个原始的资料类型值,并没有如对象会有属性或方法,原始的资料类型在运算时用的属性与方法,是向包装对象"借来"的用的,这是JS中的设计。例如一个数字的(123).toFixed(),toFixed()实际上是在Number对象原型(prototype)中声明的方法。这可以用简单的代码判断出来:

(123).toFixed === Number.prototype.toFixed // true

"abc".charAt === String.prototype.charAt // true

JS总是会求值出原始资料,而不是包装对象

因为包装对象的设计目的,主要是让原始资料使用,所以在求值过程中,总是会强制转为原始资料而非对象,例如下面的代码:

var a = new Number(12);

var b = a + 3;

typeof b; // number

字符串的情况与数字相似不再多说。

但要注意的是布尔的包装对象Boolean的对象实例,因为对象只有在null与undefined时,才会认定为布尔的false值,布尔包装对象本身是个对象,对象->布尔 都是true,所以new Boolean(false)其实是布尔的true,下面这个代码是有大坑的陷阱:

if(new Boolean(false)){

alert('true!!');

}

如果你头会昏的话,不要用这个new Boolean()的用法就对了

只有使用了valueOf后才是真正的转换布尔值,与上面包装对象与原始资料转换说明的相同:

!!(new Boolean(false)) //true

(new Boolean(false)).valueOf() //false

调用Number、String、Boolean函数,是转换其他类型到这个类型的语法

我有看到有网友们回答了,在不使用new关键字作建构对象实例时,使用像Number(123)这样的语法,这是一种从其他资料类型要转到数字类型的函数调用语法。调用后仍然是原始资料类型,并不会产生包装对象实例,用下面代码来说明:

var a = Number(123);

typeof a; // "number"

var b = Number('1.99');

typeof b; // "number"

在ECMASCript标准中分别都有定义的对照表: ToNumber、ToString、ToBoolean。

不过,一般很少用这种转换函数的调用,书上或网上都有教其他的转换语法,虽然与转换函数仍有细部不同。不过一般情况都很常见。以下举这三种的转换语法:

转为数字

+'123.456' //浮点数,这用的是一元正号(+),相同于Number('123.456')

~~'123.456' //整数,双波浪符(~)

转为字符串

'' + value //加号是字符串优先,加一个空字符串

转为布尔

!!(0) //双逻辑否(!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值