js的奇怪现象(字符串篇)

本文通过三个实例探讨了JavaScript中字符串操作的常见误区与注意事项,包括使用new String引发的问题、字符串与HTML混合使用时的错误处理及字符串连接时的细节。

今天之举两个例子:
1. String 对象.
javascript 中提供了String用来进行字符串操作,但是我并不喜欢这个东西,请看下面的例子.
 

Code:
  1. <html>   
  2.  <head>   
  3.   <title> new document </title>    
  4.   <script type="text/javascript">   
  5.  function isEquals(){   
  6.   var s = "abc";   
  7.   var s1 = new String("abc");   
  8.   if(s === s1){   
  9.    alert("yes!");   
  10.   }else{   
  11.    alert("no!");   
  12.   }   
  13.  }    
  14.   </script>   
  15.  </head>   
  16.   
  17.  <body>   
  18.   <input type="button" value="test!" onclick="isEquals()" />   
  19.  </body>   
  20. </html>   


问题就出在new上, 它让字符串又创建了一个空间内存空间,  js与java不同字符串的比较没有equals方法,只能用== / ===比较. 所以当出现new时要仔细考虑一下,

2. 与html混合.

Code:
  1. <script type="text/javascript">   
  2.  function mytest_error(){   
  3.    var s = '<input type="button" value="test!" onclick="test("a","b")" />';   
  4.    document.write();   
  5.  }    
  6.   </script>  

这里的字符串是个不折不扣"隐形"的错误. onclick="test("a","b")" /> 这两个参数 会扰乱html的解析.
应该改为:

Code:
  1. <script type="text/javascript">   
  2.  function mytest_error(){   
  3.    var s = '<input type="button" value="test!" onclick="test(/'a/',/'b/')" />';   
  4.    document.write();   
  5.  }    
  6.   </script>  

 

3. 结束符号

Code:
  1. <html>   
  2.  <head>   
  3.   <title> new document </title>    
  4.   <script type="text/javascript">   
  5.  function mytest_error(){   
  6.    var s = 'http://www.cadn.net/test.php?name=hello'  
  7.     +'&age=10';   
  8.     +"&count=12"  
  9.   alert(s);   
  10.  }    
  11.   </script>   
  12.  </head>   
  13.  <body>   
  14.   <input type="button" value="test!" onclick="mytest_error()" />   
  15.  </body>   
  16. </html>  

 

怎么最后的参数没有了? 这样是不会报错的.但是它确实错了. 能找到原因吗? 呵呵!

<think>嗯,用户问的是JavaScript中数字1加0的结果为什么是0。这看起来有点奇怪,因为正常情况下1+0应该是1才对。那问题出在哪里呢? 首先,我得考虑用户可能遇到的代码情况。可能他们看到的代码中,1和0并不是真正的数字类型,而是其他类型的数据。比如字符串或者布尔值。这时候,JavaScript的类型转换规则就会起作用,导致结果不符合预期。 接下来,我需要回忆JavaScript中的加法运算规则。如果操作数中有字符串,加法会变成字符串拼接。例如,"1" + 0会变成"10",而不是数值1。但用户得到的是0,这不太对。所以可能还有其他情况。 然后,检查用户提供的引用内容。引用2提到使用typeof判断是否为数字,如果其中一个操作数不是数字类型,比如字符串或者布尔值,可能会导致类型转换的问题。比如,true + false的结果是1,因为true转换为1,false转换为0。但用户的情况是1+0等于0,这可能需要更特殊的例子。 再想想,可能用户使用了某些函数导致数值被错误处理。比如引用3中的pad函数,如果在处理数字时,错误地将数字转换为字符串并进行切片,可能会导致数值被截断。但这里的问题是关于加法,所以可能不相关。 另一个可能性是运算符优先级或类型转换的问题。比如,如果其中一个操作数被转换为布尔值,而JavaScript中true是1,false是0。但1和0本身是数字,所以正常加法应该是1。不过,如果用户误用了其他运算符,比如位运算符,比如按位或(|),1 | 0的结果是1,而按位与(&),1 & 0的结果是0。这时候,如果用户错误地使用了位运算符,可能会得到0的结果。例如,1 & 0确实等于0,而1 + 0应该是1。所以用户可能混淆了运算符,比如把+写成了&。 还需要考虑隐式类型转换的情况。例如,如果其中一个操作数是null或undefined,可能导致意外结果。但1 + null等于1,因为null转换为0;1 + undefined的结果是NaN,因为undefined转换为NaN。所以这也不符合用户的情况。 另外,可能用户的环境中变量被覆盖了。例如,变量1被重新赋值为0,或者在作用域中存在变量名冲突,导致数值被错误地引用。这时候,1实际上可能指向另一个变量,导致计算错误。 总结可能的原因: 1. 操作数中存在字符串,导致字符串拼接,但结果不符合用户的情况。 2. 错误使用了位运算符,如按位与(&),导致结果为0。 3. 变量被意外修改,导致数值不正确。 4. 其他类型转换错误,比如布尔值或其他类型的隐式转换。 根据这些可能性,我需要一步步引导用户检查他们的代码,确认操作数的类型,运算符是否正确,以及变量是否被正确赋值。同时,结合引用的资料,比如使用typeof检查类型,确保操作数确实是数字类型。</think>JavaScript中数字`1 + 0`结果为`0`的现象通常由以下原因导致: ### 一、操作数类型错误 1. **隐式类型转换**:如果其中一个操作数实际是字符串类型(如`"1"`),JavaScript会将加法运算转换为字符串拼接。例如`"1" + 0`结果为`"10"`。但若结果为`0`,需要进一步检查类型: ```javascript console.log(typeof yourVariable); // 检查变量类型[^2] ``` 2. **布尔值参与运算**:若操作数为布尔值(如`true`被隐式转换为`1`,`false`转换为`0`),可能导致意外结果: ```javascript console.log(true + false); // 输出 1 (1+0) ``` ### 二、运算符误用 - **位运算符干扰**:若误用位运算符`&`(按位与)代替`+`,例如: ```javascript console.log(1 & 0); // 输出 0 ``` ### 三、变量覆盖问题 - **变量被意外修改**:可能变量在作用域链中被覆盖,例如: ```javascript let a = 1; function test() { let a = 0; // 覆盖外部变量 console.log(a + 0); // 输出 0 } ``` ### 验证步骤 1. **检查操作数类型**: ```javascript console.log(typeof 1, typeof 0); // 应为 "number number" ``` 2. **验证运算符**: ```javascript console.log(1 + 0); // 正确结果应为 1 ``` 3. **使用严格模式**: ```javascript "use strict"; // 避免隐式全局变量污染 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值