开发者社区> 问答> 正文

为什么 JavaScript 中字符串创建 Str 对象 为什么不用加new?

var sj=Date();
  document.write(sj.getHours());
  


  var str="大家好!"
  document.write(str.replace("好", "不好"));

大家好,第一个就不行,第二个就行?
请问为什么 date 对象必须加 new;
而string 对象为什么不用加 new?

我刚学 JavaScript ,所以这可是个 解剖麻雀 的问题,有利于我理解 JavaScript ;

谢谢了!

展开
收起
杨冬芳 2016-06-21 18:08:07 2491 0
1 条回答
写回答
取消 提交回答
  • IT从业

    javascript引用类型的值是一个实例或者说对象,它是通过new + 构造函数创建。常见的引用类型包括Object、Array、Function、String、Number、Boolean、Date等。在创建实例时我们都可以使用如下方式

    var obj = new Object();
    var arr = new Array();
    //甚至
    var fn = new Function('val', 'return val');

    但有更简洁,并且更友好的方式来创建这些类型的实例叫字面量表示法如下

    var obj = {};
    var arr = [];
    var fn = functon (val) {
        return val;
    }

    同时String、Number、Boolean属于特殊的引用类型,我们叫它基本包装类型。我们平时都是使用字面量来表示它们而很少用new方式:

    var str = '';
    var num = 0;
    var boo = false;

    但是我们为什么可以使用类似str.slice()呢? 要知道要是一个对象实例才有其对应的方法。

    var str = 'text';
    var subStr = str.substring(2);
    /*原因在于在第二行代码访问时,访问过程处于一种读取模式,后台会自动完成以下处理。
    1.创建String对象实例
    2.实例中调用指定方法
    3.销毁这个实例*/
    var str = new String('text');
    var subStr = str .substring(2);
    str = null;

    引用类型与基本包装类型主要区别在于对象的生存期,使用new创建的对象会在执行流离开当前作用域之前一直保存在内存中,而自动创建的基本包装类型对象只存在于一行代码的执行瞬间,然后立即被销毁。

    2019-07-17 19:45:11
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载