'hello world', String('hello world'), new String('hello world')

http://www.queness.com/post/9806/5-missing-javascript-number-format-functions

这篇文章介绍5种常用的数字转换格式 但是里面有一个小小的不好的编程习惯

就是在把数字转成字符串的时候 使用了 var s = new String(xxx)

这在 JSLint 中报错  Do not  use String as a conctruct

https://jslinterrors.com/do-not-use-a-as-a-constructor 这是JSLine对这种错误的解释

"虽然用这种方式写的代码在运行中不会有任何的错误, 但是却会对其他的开发人员造成困惑并且以后有不可预料的情况发生"

那究竟有什么不可预料的情况发生 下面是例子

 1 var i = 24;
 2 var s = new String(i);
 3 // 其他代码
 4 var j = 24;
 5 var s1 = new String(j);
 6 if(s == s1) {
 7     console.log(‘s == s1‘);
 8 } else {
 9     console.log(‘s != s1);
10 }

这时候可以看到 打印出来的是 s != s1 这就是不可预料的情况

var s = new String(‘hello world‘);

var s1  = String(‘hello world‘);

var s2 = ‘hello world‘;

这三者到底有什么区别呢

当我们用 typeof 打印出他们的类型的时候 我们可以发现 s 为object 而后两者则为 string

但是我们用 instanceof 来判断的时候 发现 s 是 Object 的实例 也是 String 的实例 但后两者则什么都不是

显然

s1 和 s2 一样 是基本类型 为string, s 则是引用类型

所以他们在比较的时候 也要有所注意

s1 === s2 为true 值相等同时 类型也相等

但字符串对象 s 作比较的时候 就会有讲究 如果与它比较的是字符串(基本类型) 则按值比较 如果与它比较的是字符串对象 则按引用比较 

1 var s = new String(‘hello world‘);
2 var s1 = new String(‘hello world‘);
3 var s2 = String(‘hello world‘);
4
5 console.log( s == s2 );    //true
6 console.log( s == s1 );    //false

https://msdn.microsoft.com/library/ie/d53a7bd4(v=vs.94).aspx/ 里面的 By Value vs. By Reference 也会有更详细的说明

最后说一下最开始提到的那篇文章 里面对数字格式的转换运用的逻辑和技巧都非常的棒 而且评论也非常精彩喔~

如有错误 欢迎指正 : )

'hello world', String('hello world'), new String('hello world')

时间: 2024-10-15 15:51:02

'hello world', String('hello world'), new String('hello world')的相关文章

java中String s="abc"及String s=new String("abc")详解

1.   栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2.   栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共 享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要 在运行时动态分配内存,存取速度较慢. ==是判断

collection.toArray(new String[0])中new String[0]的作用

new string[0]的作用 比如:String[] result = set.toArray(new String[0]); Collection的公有方法中,toArray()是比较重要的一个. 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]. 虽然Object数组也不是不能用,但当你真的想用一个具体类型的数组,比如String[]时,问题就来了.而把Object[]给cast成 String[]还是很麻烦的,需要用到这个: String[] str

String s="abc"及String s=new String("abc")详解

一.相关知识点 1.   栈(stack)与堆(heap)都是Java用来在Ram(随机存取存储器)中存放数据的地方, 栈数据可以共享. 2.   栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性. 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.缺点是,由于要在运行时动态分配内存,存取速度较慢. 3.   ==是判断两个对象是否是同一个对象即引用地址:equa

java的String和android的String有什么区别?

这是今天阿里电话面试被问到的,在之前确实没有想过(一直以为是一样的),于是面试完之后,我马上打开了源码,对这两个String类进行了比较,下面是我的发现. 首先我观察了这两个String类所导入的包,发现两者有些差异: 这是android版本: import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; import java.nio.CharBuffe

深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。

1:要判断2个字符串变量是否相等,最高效的方法是看它们是否指向相同的内存地址.前面使用RefernceEquals方法来比较.如果2个变量指向的是不同的内存地址,那么就需要逐字符的比较2个字符串的变量,才能确认它们是否相等.由于逐字比较会花费大量的时间,降低性能.所以.NET提供了String.Equals方法来优化比较过程该方法能自动地完成引用比较和值比较. string str1="abc"; string str2="abc"; string str3=Str

String s;和String s=null;和String s="a";有什么区别?

String s;和String s=null;和String s="a";有什么区别?   针对这三种情况,使用out.println(s);的时候,第一个会出现异常,第二个会输出null.第三个则会输出a.   这是为什么呢?这三句声明语句,各自作了什么呢? 答: 第一个只是定义了一个String类型变量s,并没有给它赋初值,在Java中,默认在使用一个变量的时候必须赋予它初值(降低风险). 第二个和第三个都定义了String类型变量s,并赋予它初值,只不过第二个赋予的值为null

Map<String,List<String>>转为List<Map<String,String>>

/**  *   * @param map  输入  * @param list 输出  * @param idx     次序  * @param pathMap 已选  */ void map2List(Map<String, List<String>> map, List<Map<String, String>> list,                                     int idx, HashMap<String,S

java String.getBytes()编码问题——String.getBytes(charset)

String的getBytes()方法是得到一个字串的字节数组,这是众所周知的.但特别要注意的是,本方法将返回该操作系统默认的编码格式的字节数组.如果你在使用这个方法时不考虑到这一点,你会发现在一个平台上运行良好的系统,放到另外一台机器后会产生意想不到的问题.比如下面的程序: class TestCharset {  public static void main(String[] args) {  new TestCharset().execute();  }  private void ex

inputStream输入流转为String对象(将String对象转为inputStream输入流)

不得不说org.apache.commons包下有很多实用的工具类. org.apache.commons.io.IOUtils; 要将inputStream输入流转为String对象,只需使用org.apache.commons.io.IOUtils这个工具类. IOUtils.toString(inputStream):将inputStream输入流转为String对象 IOUtils.toInputStream(String string); 将String对象转为inputStream输