Javascript中String()与new String()的差异

这里主要关注的是值类型和引用类型。

我们知道在javascript中的变量在内存中的存储有两种形式,值类型存储和引用类型存储。

通常可以进行值存储的包括  字符串类型,布尔值类型,数字类型,他们都包含了字面量表示形式,如下:

var str=‘str‘;
var bool=true;
var num=11;

这里定义的变量是直接在地址中存值的,而常用的数组(其实也属于对象)和对象也有字面量,不过是引用存储,即内存中存储的是对应数据的地址(不是本文重点)。

接着我们探究String()和new String()的差异

var str1=String(‘str1‘);
str1.aa=‘hello‘;
console.log(‘str1.aa:‘,str1.aa);//str1.aa: undefined

var str2=new String(‘str2‘);
str2.aa=‘world‘;
console.log(‘str2.aa:‘,str2.aa);//str2.aa: world

内存引用的变量归根结底都是object,是可以设置值和取值的(要产生设置值和取值不同,除非定义了getter和setter,没那么巧吧?)

通过上面的测试,发现String()直接使用返回的是值存储,而new String()  返回的是引用存储,即 返回的是一个对象(这是很合理的啊,new 出来的都是对象嘛,呵呵)。

给出另一个测试方式

var Fun1=function(){
    return String(‘str1‘);
};

var Fun2=function(){
    return new String(‘str1‘);
};

console.log(‘Fun1 output:‘,new Fun1());//Fun1 output: {}
console.log(‘Fun2 output:‘,new Fun2());//Fun2 output: [String: ‘str1‘]

这个测试主要是根据constructor 的return ,如果是对象的话,就会直接把对象结果返回替换当前对象,而如果是值则忽略。

同理证明 Boolean() 和 Number();

var boolVal1=Boolean(true);
boolVal1.aa=‘hello‘;
console.log(‘boolVal1.aa:‘,boolVal1.aa);//boolVal.aa: undefined

var booVal2=new Boolean(true);
booVal2.aa=‘world‘;
console.log(‘booVal2.aa:‘,booVal2.aa);//booVal2.aa: world

var numVal1=Number(1);
numVal1.aa=‘hello‘;
console.log(‘numVal1.aa:‘,numVal1.aa);//boolVal.aa: undefined

var numVal2=new Number(1);
numVal2.aa=‘world‘;
console.log(‘numVal2.aa:‘,numVal2.aa);//numVal2.aa: world
时间: 2024-10-04 23:43:46

Javascript中String()与new String()的差异的相关文章

实现一个函数clone,使JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制

实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制. 1 /** 对象克隆 2 * 支持基本数据类型及对象 3 * 递归方法 */ 4 function clone(obj) { 5 var o; 6 switch (typeof obj) { 7 case "undefined": 8 break; 9 case "string": o = obj + &q

JavaScript中的String对象

String对象提供的方法用于处理字符串及字符. 常用的一些方法: charAt(index):返回字符串中index处的字符. indexOf(searchValue,[fromIndex]):该方法在字符串中寻找第一次出现的searchValue.如果给定了fromIndex,则从字符串内该位置开始搜索,当searchValue找到后,返回该串第一个字符的位置. lastIndexOf(searchValue,[fromIndex]):从字符串的尾部向前搜索searchValue,并报告找到

ExtJS学习-----------Ext.String,ExtJS对javascript中的String的扩展

关于ExtJS对javascript中的String的扩展,能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以下对当中的部分方法进行介绍: (1)capitalize capitalize( String string ) : String 返回一个字符串.该字符串中第一个字母为大写字母 Parameters string : String 要转换的字符串 Returns String 转换后的字符串 (2

JavaScript中String对象的match()、replace() 配合正则表达式使用

正则表达式由来已久,查找替换功能非常强大,但模板难记复杂. JavaScript中String对象的match().replace()这2个方法都要使用正则表达式的模板.当模板内容与字符串不相匹配时,match()返回null,replace()返回原字符串. 正则表达式的模板对象 //标准写法 regexp = new RegExp(pattern[, flag]); pattern: 模板的用法是关键,也是本章的主要内容. flag: "i"(ignore)."g&quo

Javascript中String对象的常用方法

charAt(): 返回在指定位置的字符. charCodeAt(): 返回在指定的位置的字符的 Unicode 编码. var s = "Smile forever!"; s.charAt(2); //i s.charCodeAt(2); //105 concat(): 连接字符串,参数可以是多个字符串. var s1 = "Smile forever!"; var s2 = "extend"; s1.concat(s2); //Smile f

JavaScript中的String

1.基本类型String var str = "helloworld"; 要记住:保存的是Unicode字符,一旦创建便不可变 2.引用类型String var strObj = new String("hello world"); 要点: 字符方法:     alert (strObj.charAt(0)); // 'h'     alert (strObj.charCodeAt(1)); // 101 即 'e' 的 unicode编码     alert(st

JavaScript中String对象处理HTML标记中文本的方法

big():创建一个<big></big>标记,将这个字符串的字体变大blink():创建一个<blink></blink>标记,使字符串具有闪烁效果bold():创建一个<bold></bold>标记,使字符串加粗显示fixed():创建一个<tt></tt>标记,使字符串固定倾斜显示italics():创建一个<i></i>标记,使字符串以斜体显示small():创建一个<sm

Javascript中String对象的的简单学习

第十一课String对象介绍1:属性    在javascript中可以用单引号,或者双引号括起来的一个字符当作    一个字符对象的实例,所以可以在某个字符串后再加上.去调用String    对象的属性和方法.        例如    length返回string对象的长度,代表的是字符串当中字符的个数.    "大家好".length;//字符串的长度是3,每个汉子代表一个字符    2:常用方法    indexOf(substring[,startIndex])      

浅谈JavaScript中的string拥有方法的原因

我们都知道,JavaScript数据类型分两大类,基本类型(或者称原始类型)和引用类型. 基本类型的值是保存在栈内存中的简单数据段,它们是按值访问的.JS中有五种基本类型:Undefined.Null.Boolean.Number和String. 引用类型的值是保存在堆内存中的对象,它的值是按引用访问的.引用类型主要有Object.Array.Function.RegExp.Date. 对象是拥有属性和方法的,所以我们看到下面这段代码一点也不奇怪. var favs=['鸡蛋','莲蓬']; f