2010-06-16 43 views
3

我有follwing jQuery的:传递null作为JavaScript中的替代()行为怪异的参数?

 $("#textArea").keyup(function(){ 
      var textAreaValue = $("textArea"); 
      if(!textArea.value.indexOf("some string")){ 
       textArea.value = textArea.value.replace("some string",null); 
       alert("It was there!"); 
      } 
     }); 


  • 是正常的element.value.replace("some string",null);"null"作为一个字符串替换"some string"?如果正常,你可以解释为什么?

  • 我用element.value.replace("some string","")进行了测试,效果很好,那么null""之间的区别是什么?

使用FireFox 3.6.3,在此先感谢。

回答

3

看起来像null已被键入到字符串。

尝试:

"a" + null // "anull" 

虽然你不能在null对象上调用toString(),似乎空对象被隐式转换为一个字符串,这给串"null"

String(null) // "null" 
+0

当期望字符串时传递'null'并不总是有这个结果,它通常不是所希望的结果。 – 2010-06-16 04:17:57

+0

@tehMick - 按照[ECMAScript 5th ed。](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf)的规定,String.prototype.replace的行为表明应将null'replaceValue'替换为字符串'“null”'。其他情况可能会出乎意料,但对于String.prototype.replace,这是非常期待的。 – Anurag 2010-06-16 06:55:35

+0

Good call - “否则,让newstring表示将replaceValue转换为String的结果。”这可能适用于第五版。和这个特殊的函数,但是再一次,除非你打代码高尔夫,为什么要传递'null'而不是''null''?它只是为了混淆你的代码的未来读者,因为一个天真的解释是你用* nothing而不是null来替换match。 – 2010-06-16 14:42:30

1

""是一个空字符串..

null的东西,表示有意非价值或不确定...

null主要是用来初始化objects

和海峡。替换(参数1,参数2),参数1和参数2应该是string或产生string(在参数2)...在那说,

var heart_type = 'images/unheart.png'; 
alert(heart_type.replace(".png",null));​ 

会提醒images/unheartnull ..因为空被作为string处理...

.replace() reference

1

String.replace第二个参数是必需的参数,它必须是一个字符串。见mdcw3schools。通过null不是正常的或安全的,这不是一个字符串。如果你的代码在所有的JavaScript引擎中都不能正确执行,请不要感到惊讶。