JS中var abc = new Number(68);与var abc = 68;有啥本质上的区别吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中var abc = new Number(68);与var abc = 68;有啥本质上的区别吗?相关的知识,希望对你有一定的参考价值。
我在看w3school的ECMAScript的教程,看完了声明变量,正在看ECMAScript 引用类型。据说这个引用类型一般被称为类(class),我感觉好开心,终于接触类了,这正是我想学的内容,问题是下面都是var o = new Object();var oFalseObject = new Boolean(false);之类的格式,感觉和声明变量很像啊,这是怎么回事?
的确是很像
js中的语法决定
var a ; 声明一个变量, 而不像java中需要类名声明,如 Object a;
js关键字new 等同java中的new
var a = new Object();
等同java的 Object a = new Object();
所以只要分清楚各语言的语法就行,记住new 是实例化一个对象
var abc = new Number(68)和var abc = 68 没太多区别
var abc = new Number(68)指定了实例化类对象,即Number
var abc = 68,指实例化一个对象,abc,其值为68,由于js是弱对象,所以js引擎在给abc赋值时,会判断“68”是一个整数,因此会将abc转换成一个Number对象
var abc1 = new Number(68)
var abc2 = 68
var abc3 = '68'
alert(typeof(abc1))
alert(typeof(abc2))
alert(typeof(abc3))
结果为
Number
Number
String
追问您的意思是说,
var a = 10;
并没有对a实例化。
var a = new Number(10);
是对a实例化了?
都实例化了
var a = 10; 有js帮你实例化
typeof()返回的就是他的类(class)型
那么说它们是一样的,那为什么w3school要把它们分开来说啊...
追答机制稍稍不一样,我上面也说明了
w3school 分开说,就是怕人不清楚
本质区别就是:类型不同
前者是返回的是一个object,后者返回一个number。
typeof new Number(6); //objecttypeof 68; //number 参考技术B new的是引用类型,与直接量是不一样的,一个是值存储在堆里面,一个是值存储在栈里面的,执行效率也是不一样的 参考技术C 我看w3schoolECMAScript教程看完了声明变量正看ECMAScript 引用类型据说引用类型般被称类(class)我感觉好开心终于接触类了正我想学内容问题下面都var o = new Object();var oFalseObject = new Boolean(false);之类格式感觉和声明变量像啊回事
js数据强转
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript"> /* 强转 */ /* 1.其他类型转为Number类型 */ var s1 = "10"; var s2 = "abc"; var b1 = false; var o1 = Object(10); var o2 = new Array(); o2[0]=1; o2[1]=2; var o3 = null; document.write("String转number,可转:"+Number(s1)+"<br>");//10 document.write("String转number,不可转:"+Number(s2)+"<br>");//Nan document.write("boolean转number,可转:"+Number(b1)+"<br>");//0 document.write("Object转number=:"+Number(o2)+"<br>");//若o2中只有o2[0],则为1,若还有o2[1],则为NaN document.write("null转number:"+Number(o3)+"<br>");//0 /* 能转就转,不能转就为NaN, */ /* 2.其他类型转为boolean类型 */ var nb = 10; var sb = "abc"; var ob = new Object(1); var unb; //2.1Number转Boolean document.write("Number转Boolean:"+Boolean(nb)+"<br>");//非零转成true,0转成false //2.2String转Boolean document.write("String转Boolean:"+Boolean(sb)+"<br>");//非空转成true,空转成false //2.3Object转Boolean document.write("Object转Boolean:"+Boolean(ob)+"<br>");//非null转成true,null转成false //2.4声明未赋值(undefined)转Boolean document.write("声明未赋值(undefined)转Boolean:"+Boolean(unb)+"<br>");//false
</script> </head> <body> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript"> /* 3.boolean转String */ var b = true; document.write("Boolean转String:"+typeof(b.toString())+"<br>");//String /* 4.String转Number */ var s = "10"; document.write("String转Number:"+typeof(parseInt(s) )+"<br>");//number </script> </head> <body> </body> </html>
以上是关于JS中var abc = new Number(68);与var abc = 68;有啥本质上的区别吗?的主要内容,如果未能解决你的问题,请参考以下文章