<html>
<head>
<script type="text/javascript">
function fuck()
{
var iString  = new String("fuck");
var oString = iString.concat(" you");
alert(iString instanceof String);
}
</script>
</head><body onload="fuck()"></body>
</html>返回的 当然是true但是如果是alert(oString instanceof String);
返回的就是 false  为什么 oString 不是字符对象么?

解决方案 »

  1.   

    正如你所看到的 他不是一个字符串 
    concat是用于连接两个数组的 字符串通常没有用concat的 而是用 += 
      

  2.   


    function fuck()
    {
        var iString  = new String("fuck");
        var oString = iString.concat(" you");
        alert(typeof iString);
        alert(typeof oString);
    };
    fuck();
    这个弹出的结果是 object 和 string
    而instanceof 方法要求开发者明确地确认对象为某特定类型,我的理解是oString不是String的实例,因为它不是真正的对象,而是伪对象。
    参考下面链接的:concat返回的是 String 原始值,而 String 对象的所有属性和方法都可应用于 String 原始值上,因为它们是伪对象。
    http://www.w3school.com.cn/js/pro_js_referencetypes.asp
      

  3.   

    1、字符串(String)是油Unicode字符、数字、标点符号等组成的序列,它是JavaScript中用来表示文本的数据类型。虽然它们使用对象访问属性和方法的语法,但是它们自身并不是对象。只有使用字符串构造函数String()与new运算符一起构造函数时,返回的才是一个String对象,这个对象存放的是字符串。其它时候返回的都是一个字符串,既是一个String的基本数据类型。
    2、instanceof运算符的左运算数不是对象时就会返回false
    3、typeof运算符主要是用来从对象中区分出基本类型(string,number,boolean)。如果typeof的运算数是数字、字符串或者布尔值,它将返回的结果是"number"、"string"、"boolean"。对对象、数组和"null",它将返回"object"。对函数,它将返回"function"。对于"undefined",它将返回"undefined"。特别注意:如果typeof的运算数是Number,String或Boolean这样的包装对象时,它将返回"object"。此外,对于"Date"和"RegExp"对象,它也将返回"objext".
    如果楼主把这一句改成这样var oString = new String(iString.concat(" you"));结果为true,并且此时typeof(oString)将返回"object".
      

  4.   

    concat()将把它所有的参数转换成字符串,然后返回连接后的新字符串,原来的string自身并没有被修改。