有些人想了解一些 jQuery选择器 的知识。我强烈推荐 艾伦的博客园,里面有jQuery源码分析系列,给出了详尽的讲解。
String不就是一个字符串吗?有什么好讨论的呢?
String object 和 String primitives 有什么不同呢?不就是用不用new关键字嘛。
实例
例一:
按理说以上代码应该 两个class 都加成功的,这是什么原因呢?
第一个想到的原因是后面的把前面的覆盖掉了。
例二:
好像不是被覆盖掉的,而是加new 关键字的 没有添加成功。
查看jQuery源码,发现了原因。
在jQuery源码中,所有判断传入参数是字符串的地方都是这么写的:
typeof str == "string"
而在1.0.4版本之前,源码是这么写的:
str.constructor == String
区别
那么,这两个关键字的区别是什么:
typeof "abc" ----> "string",
typeof new String("abc") ----> "object"
"abc".constructor ---> String
new String("abc").constructor ---> String
这也是导致上面例子出现那样效果的原因。而在1.0.4版本之后,一直使用的是typeof,至于为什么要把string primities 和 string object区别对待,这个问题我还没有搞懂。
不过找到一些string primities 和 string object的不同。
上面typeof的结果是一种不同,
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"
互相转换
当然,String object 还是能转化成 string primities的
console.log(eval(s2.valueOf())); // returns the number 4
所以,在使用jQuery的字符串时,一定要注意使用String primitive,也就是字符串字面量。