goo*_*orp 35 javascript debugging
我正在计划关于JavaScript的介绍性演讲,在准备过程中,我想知道新秀陷入的最大陷阱是什么.
我知道在我完全理解闭包之前我已经遇到了一些问题,但JavaScript中的许多奇怪行为都不是我想的了......
那么,你应该向新秀指出哪些陷阱?
Dan*_*ert 34
'' == '0' //false
0 == '' //true
0 == '0' //true
false == 'false' //false
false == '0' //true
false == undefined //false
false == null //false
null == undefined //true
" \t\r\n" == 0 //true
Run Code Online (Sandbox Code Playgroud)
以及之间的差异null和undefined.如表中列出的以上,比较null和undefined与==返回true,但===它返回false.一旦您理解了undefined与具有null值的变量非常不同,并且持有该值的 undefined某些内容与未定义的内容不同,则此行为是有意义的.
Ben*_*tto 27
不要在对象定义文字中意外留下尾随逗号,否则IE将失败,直到很久以后你才会注意到,因为你从未使用IE进行开发,到那时它可能会搞清楚发生了什么.
var foo = {
bar: "bar",
baz: "baz",
};
Run Code Online (Sandbox Code Playgroud)
注意@ JulianR的评论:在数组中,IE不会直接通过抛出一些语法错误而失败,但是当你尝试使用数组时会失败,因为添加的逗号让IE认为数组中还有一个元素,有价值undefined,比那里实际上是.因此,如果您遇到错误,因为某些原因,数组中的最后一个元素是undefined:它是逗号.
And*_*y E 22
不可否认,过去我曾经为其中的一些人感到内疚,为了你的娱乐,这是大胆的:
evaleval("obj."+prop);Run Code Online (Sandbox Code Playgroud) with语句parseInt(str, base)不指定base参数.this计时器/回调函数.setTimeout("someFunc(myScopedVarWhoops)");$(1).plus(1)任何人?;-)continue不增加或调整条件变量的情况下使用.var在for陈述中或之前忘记.for (i=0;i<10;i++)return condition ? true : false;而不是return condition;try...catch...finally语句来捕获错误而不是使用if语句来检查变量.{ 0: "Foo", 1:"Bar", 2:"Foobar" }而不是[ "Foo", "Bar", "Foobar" ]parseInt()用户输入
parseInt("1,000") // -> 1, wrong!
+"1,000" // -> NaN, correct!一些人已经提到:
===尽可能不使用严格的equality()运算符;正确终止陈述for...in在数组上使用循环我睡觉后可能会想到更多:-)
Poi*_*nty 15
varKob*_*obi 14
+ 连接字符串:
var a = '2';
var b = 3;
a * b # 6
a - b # -1
a + b # 23
Run Code Online (Sandbox Code Playgroud)
JavaScript字符串不是字节字符串,也不是Unicode字符串.它们是UTF-16字符串.
例:
> "?".length
1
> "".length
2
> "".charAt(0)
"\uD800"
> "".charAt(1)
"\uDF08"
> "" === "\uD800\uDF08"
true
Run Code Online (Sandbox Code Playgroud)
如果上面看起来像垃圾,责怪您的浏览器有错误的Unicode处理(或可能是您的字体,因为没有'OLD ITALIC LETTER THE'字符).
我再也想不到了,但我希望这会有所帮助.