资讯专栏INFORMATION COLUMN

关于""创建字符串和new String创建字符串

GT / 2507人阅读

摘要:当使用时,基本字符串和字符串对象也会产生不同结果,会将基本字符串作为源代码处理,而字符串对象则被看作对象处理,返回对象。利用方法,我们可以将字符串对象转换为其对应的基本字符串。

笔试的时候总会遇到string 和 new String相关的问题,汇总一下
var s1 = "abc"
var s2 = String("abc")
var s3 = new String("abc")
var s4 = new String("abc")

console.log("s1 == s2", s1 == s2)  //true
console.log("s1 === s2", s1 === s2) // true
console.log("s1 == s3", s1 == s3)  //true
console.log("s1 === s3", s1 === s3) //false
console.log("s2 == s3", s2 == s3)   //true
console.log("s2 === s3", s2 === s3) //false
console.log("s3 == s4", s3 == s4)  //false
console.log("s3 === s4", s3 === s4)  //false

浏览器中运行截图如下:

上述字符串创建的三种形式,用“”创建是字符串字面量(通过单引号或者双引号定义)和直接调用String(不用new)生成的字符串都是基本字符串(可以理解为两种方式一样),使用new String创建的字符串为字符串对象。

基本字符串和字符串对象的区别

JavaScript会自动将基本字符串转换为字符串对象,只有将基本字符串转化为字符串对象后才可以使用字符串对象的方法。当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串没有这些方法),JavaScript会自动将基本字符串转化为字符串对象并且调用相应的方法或执行查询。

当使用eval时,基本字符串和字符串对象也会产生不同结果,eval会将基本字符串作为源代码处理,而字符串对象则被看作对象处理,返回对象。

s1 = "2 + 2";               // creates a string primitive
s2 = new String("2 + 2");   // creates a String object
console.log(eval(s1));      // returns the number 4
console.log(eval(s2));      // returns the string "2 + 2"

利用 valueOf 方法,我们可以将字符串对象转换为其对应的基本字符串。

console.log(eval(s2.valueOf())); // returns the number 4

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85197.html

相关文章

  • 关于String.intern()new StringBuilder("").

    摘要:对比较返回是因为这个字符串在执之前已经出现过,字符串常量池中已经有它的引用了,不符合首次出现的原则,而计算机软件这个字符串则是首次出现的,因此返回。 在《深入理解Java虚拟机》书中,提到在jdk1.7的版本中用String.intern()返回引用。 public class RuntimeConstantPoolOOM { public static void main(S...

    derek_334892 评论0 收藏0
  • 为什么不建议在for循环中使用"+"进行符串拼接

    摘要:使用可以方便的对字符串进行拼接。该方法使用进行声明,说明是一个线程安全的方法。所以,阿里巴巴开发手册建议循环体内,字符串的连接方式,使用的方法进行扩展。但是,还要强调的是如果不是在循环体中进行字符串拼接的话,直接使用就好了。 摘要: 学习阿里巴巴Java开发手册。 原文:为什么阿里巴巴不建议在for循环中使用+进行字符串拼接 微信公众号:Hollis Fundebug经授权转载,...

    caoym 评论0 收藏0
  • 从指令的角度看"abc"new String("abc")

    摘要:但是有一个的指令,可以把字节码翻译成人类能看懂的东西。是文件分解器,可以反编译即对编译的文件进行反编译,也可以查看编译器生成的字节码。现在有一个类,定义入下先用编译成字节码,再使用进行反编译。 概要 Java工程师面试官偏爱的问题之一,就是abc和 new String(abc)的区别是什么?回答的比较好的会带出Java堆,栈,常量池,引用等概念。但今天不止如此,我们从指令的角度,去看...

    doodlewind 评论0 收藏0
  • Java日期格式化

    摘要:瞬间可用毫秒值来表示,它是距历元即格林威治标准时间年月日的,格里高利历的偏移量。创建对象常用方法返回当前对象的一些日期信息获得当前日期的对象根据日历的规则,为给定的日历字段添加或减去指定的时间量。日期格式化前言Date类表示特定的瞬间精确到毫秒,不过从API可以看出很多的方法已经废弃了,这个类已经在过多使用了,不过还是需要了解一下的,为了后面的学习做铺垫构造方法new Date()long ...

    PingCAP 评论0 收藏0
  • 关于"a"+"b"共创建了几个对象的问题

    摘要:首先,我们先看下以下代码的输出情况将这段代码反编译后得到如下结果重点是这句,可以发现从一开始就是一个整体,这是因为在编译时就去掉其中的加号,直接将其编译成一个相连的结果存入了常量池,而不是等到运行时再去进行相加,所以运行结果为结论只创建了一 首先,我们先看下以下代码的输出情况 String s = a + b; System.out.println(s == ab); // true...

    lavor 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<