1. 隐式创建全局变量
function test(){
var a = c = 10;
}
test()
console.log(c); // 10
console.log(a); // a is not defined
给未定义的变量赋值会在隐式地创建一个全局变量,而全局变量是Javascript最邪恶的一个特性,应尽量避免。 使用严格模式(“use strict”)可避免这类隐式创建。
2. 没有块作用域
function test(){
var a = 10;
if(true){
var b = 11;
}
console.log(a+b);
}
test(); //21
console.log(a); // a is not defined
javascript有块语法但是没有块作用域, 在一个函数内部定义的变量对整个函数可见。在Javascript中,只有全局作用域和函数作用域(Local作用域)。因此,在定义一个函数时,一开始就把所需用到的变量声明好是更好的实践,而非Java中那样在需要使用前再声明。
3. 分号
function test1(){
return {
status: true
};
}
function test2(){
return
{
status: true
};
}
console.log(test1());//{status: true}
console.log(test2());//undefined
在使用return语句时,应保证return语句后紧跟需要返回的值,如果换行会导致最后的分号形成一条单独的空语句,整个函数的返回值就成了这条空语句的返回值undefined.
4.typeof
console.log(typeof null); //object
console.log(typeof NaN); //number
console.log(typeof /a/); //object
console.log(typeof Array); //function
console.log(typeof []); //object
console.log(typeof 1); //number
console.log(typeof new Numeber(1));//object
简单一句话,谨慎的使用typeof, 使用之前最好先验证一下,因为其返回值有时是反直觉的。
5. parseInt
console.log(parseInt(8)); //8
console.log(parseInt("8")); //8
console.log(parseInt("8 kg")); //8
console.log(parseInt("8kg")); //8
console.log(parseInt("08")); //8
console.log(parseInt("08",10)); //8
console.log(parseInt("09")); //9
console.log(parseInt("09",8)); //0
ParseInt接收2个参数,第一个是需要转换的字符串string,string前面的字符串会自动忽略;第二个是需要转换的进制radix,如果不给的话,各个浏览器的实现方式就不一样了,ECMAScript 5中把其默认值修改为10进制,避免了很多的麻烦,为了兼容老的标准,最好是在使用parseInt时总是给一个radix,让代码更清晰,也避免老版本的兼容问题。
6. 假值
在javascript中,代表false的值有:
0
NaN
‘’
false
null
undefined
其它的值都为真,在做条件判断的时候要牢记。
7. 等于和不等于
console.log(''=='0'); //false
console.log(''== 0); //true
console.log('0'== 0); //true
console.log(false =='false'); //false
console.log(false =='0'); //true
console.log(false == undefined); //false
console.log(false == null); //false
console.log(undefined == null); //true
console.log('\t\r\n' == 0); //true
console.log(''==='0'); //false
console.log(''=== 0); //false
console.log('0'=== 0); //false
console.log(false ==='false'); //false
console.log(false ==='0'); //false
console.log(false === undefined); //false
console.log(false === null); //false
console.log(undefined === null); //false
console.log('\t\r\n' === 0); //false
javascript中提供了2组相等比较操作符(===和!==, ==和!=),从上面的代码中可看出, ==这组操作太邪恶了,一堆反直觉的结果值,因此在代码中应尽量避免使用这组操作符。
8. 位操作符
javacript中提供了很多位操作符:
&,|,^,~,>>,>>>,<<,<<<
首先,位操作是作用于整数, 在Java中使用位操作是因为其更复合于硬件的运行原理从而可以极大的提升程序运行的效率,可是Javascript中,首先没有整数,只用double精度的浮点数,使用位操作需要先把运算子转换为整数,运算完之后再转回浮点数;其次,javascript离硬件还很远,中间隔着各种实现引擎。因此在javascript中使用位操作是吃力不讨好的事,应尽量避免使用。
9. void
var a = 10;
console.log(void a); //undefined
console.log(a); //10
javascript中有一个名叫void的操作符,该操作符接受一个运算子,然后返回undefined。然后就木有了,这个操作符的应用场景我实在没有想到,不明白定义出来干什么的。
分享到:
相关推荐
Algorithm-javascript.zip,javascript填坑记录,算法是为计算机程序高效、彻底地完成任务而创建的一组详细的准则。
JavaScript 中的this 总是让人迷惑,应该是js 众所周知的坑之一。 个人也觉得js 中的this 不是一个好的设计,由于this 晚绑定的特性,它可以是全局对象, 当前对象,或者…有人甚至因为坑大而不用this。 其实如果...
DES 支持中文 无+号变空格风险 java 和javascript互相加解密,避免很多坑
JavaScript语言精粹,javascript进阶必读,所有的JavaScript的坑都在这里
浅谈react useEffect闭包的坑 问题代码 看一段因为useEffect导致的闭包问题代码 const btn = useRef(); const [v, setV] = useState(''); useEffect(() => { let clickHandle = () => { console.log('v:',...
JavaScript语言是一门面向对象的语言,但JS中并没有类的概念的。于是JavaScript采用构造函数的方式来模拟类的效果,即我们通过函数来创建对象。...本文主要介绍了Javascript中构造函数的一些坑,需要的朋友可以参考。
主要介绍了JavaScript代码编写中各种各样的坑和填坑方法,相信你肯定遇到过这些陷阱,而且陷入过,本文共计介绍了5种坑和填坑方法,需要的朋友可以参考下
下面小编就为大家带来一篇盘点javascript 正则表达式中 中括号的【坑】。小编觉得总结的不错。现在分享给大家,希望能给大家一个参考
今天就带大家看一看JavaScript中常见的错误类型。 js中的控制台的报错信息主要分为两大类,第一类是语法错误,这一类错误在预解析的过程中如果遇到,就会导致整个js文件都无法执行。另一类错误统称为异常,这一类的...
1. 数组的神奇变化 2.+ - 运算符之惑 3.堆栈溢出之谜 1. 异步 2. 闭包 5.回文判断
作为一个前端,避免不了会遇见IE的坑,其他浏览器都好好的,测到IE就完蛋,各种不支持,服气了 有些属性和方法是所有版本IE都不支持,而有些则是部分支持,在项目中能够,主要分界岭为IE8,我相信目前大部分在...
在Android studio中最新sdk中成功完成了java和javascript之间的互调,原谅我要1分,因为我花了半天时间才搞定,解决了一些坑。android端提供json数据,在浏览器(webView显示的)中通过table+js显示数据,并实现了...
主要介绍了JavaScript中使用typeof运算符需要注意的几个坑,本文总结了4个使用typeof运算符要注意的问题,需要的朋友可以参考下
网页 前端开发常用插件 polacode截图部分代码代码 学习链接: : 手机调试: < script src = ... < / script > 不错的网站也 如果觉得对你帮助,记得打赏哦。
组织和编写易于测试的代码需要花费一些精力和并对其进行规划,但是在函数式编程的启发下,我们发现了一些模式,当我们需要测试我们的代码时,这些模式可以帮助我们避免那些“坑”。在这篇文章中,我们会查看一些有用...
JavaScript获取网页的宽高及如何兼容详解 很多场景下会需要获取当前网页的宽高来达到一些效果,但是获取网页的宽高这里面还是有一点(hen duo)坑的,这里我进行了总结和详解,若有补充欢迎评论补充~ 这种方式只...
主要介绍了弱类型语言javascript开发中的一些坑,结合实例形式总结分析了javascript开发中关于变量、函数、数组、对象、作用域等相关知识点常见易错问题,需要的朋友可以参考下