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 分开说,就是怕人不清楚

参考技术A

本质区别就是:类型不同

前者是返回的是一个object,后者返回一个number。

typeof new Number(6);   //object
typeof 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;有啥本质上的区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

这句话啥意思,javascript中 var num = new Number();

JS数据类型

JS数据类型

extjs:var error = new Error()

js 操作数字类型

js数据强转