var sj=Date();
document.write(sj.getHours());
var str="大家好!"
document.write(str.replace("好", "不好"));
大家好,第一个就不行,第二个就行?
请问为什么 date 对象必须加 new;
而string 对象为什么不用加 new?
我刚学 JavaScript ,所以这可是个 解剖麻雀 的问题,有利于我理解 JavaScript ;
谢谢了!
Date是构造函数,new是操作符new Date()
就是创建一个日期对象
var s = 'abc'
typeof s //"string" 基本类型
var s = new String('abc')
typeof s //"object" 对象
所以就算要比较也是
// 一:
var s = String('大家好') // string
var s = new String('大家好') // object
// 二:
var sj=Date();
console.log(typeof sj) // string 返回的是一个字符串,当然不能使用日期对象的方法getHours
console.log(sj); // Sat Apr 02 2016 09:32:56 GMT+0800
var sj=new Date();
console.log(typeof sj); // object 返回的是对象,自然能使用日期对象的方法。
console.log(sj.getHours); // 9
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创建的对象会在执行流离开当前作用域之前一直保存在内存中,而自动创建的基本包装类型对象只存在于一行代码的执行瞬间,然后立即被销毁。
car a="" 是 car a= new String 的简单实现