`

Javascript中那些坑

 
阅读更多
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。然后就木有了,这个操作符的应用场景我实在没有想到,不明白定义出来干什么的。
1
0
分享到:
评论

相关推荐

    Algorithm-javascript填坑记录.zip

    JavaScript填坑记录是对开发者在学习和应用算法过程中遇到的问题与解决方法的详细记录。这个名为"Algorithm-javascript填坑记录.zip"的压缩包文件,很可能包含了作者在深入理解和实现算法时的经验总结和代码示例。 ...

    JavaScript语言精粹 pdf

    这本书由Douglas Crockford所著,他不仅是JavaScript语言的重要贡献者,更是JSON格式的发明者,因此在书中,他以其丰富的经验和深刻的洞察力,对JavaScript进行了全面而透彻的剖析。 ### 重要知识点概览 #### 1. ...

    基于CSS、Python、HTML、JavaScript的代码坑点修复与优化设计源码

    该项目是一套综合优化设计源码,涵盖CSS、Python、HTML、JavaScript等多种编程语言,总计包含343个文件。其中,Python脚本文件67个,HTML文件47个,字体...本源码着重于修复代码中的潜在问题,提升项目整体质量与性能。

    详解JavaScript中的this

    JavaScript 中的this 总是让人迷惑,应该是js 众所周知的坑之一。 个人也觉得js 中的this 不是一个好的设计,由于this 晚绑定的特性,它可以是全局对象, 当前对象,或者…有人甚至因为坑大而不用this。 其实如果...

    JavaScript语言精粹.pdf

    标题提到的“坑”可能指的就是在JavaScript编程中容易遇到的陷阱和错误,如作用域混淆、异步编程中的回调地狱、内存泄漏等,这本资料可能详细说明这些潜在问题,并提供解决方案。 由于提供的部分内容并非实际文件...

    ArcGIS API for JavaScript4.10加载高德地图

    在本文中,我们将深入探讨如何使用ArcGIS API for JavaScript 4.10版本来加载高德地图,并结合高德地图的影像数据,实现自定义的GaodeMapLayer模块。ArcGIS API for JavaScript是一个强大的Web GIS开发工具,它允许...

    这些年遇到的js的坑

    在JavaScript的世界里,开发者经常会遇到各种各样的坑,这些坑可能是由于语言特性的不熟悉、兼容性问题或是编码习惯导致的。这篇博文“这些年遇到的js的坑”可能涵盖了作者在实践中遇到的一些难点和陷阱,虽然没有...

    JavaScript面对国际化编程时的一些建议

    什么是国际化? 国际化(Internationalization的缩写是i18n——i,中间18个字符,n)是将软件处理的能让来自各种地方使用各种语言的用户更简单使用的一个过程。假定某个用户来自某个地方说某种语言,他可能不经意间就...

    JavaScript代码编写中各种各样的坑和填坑方法

    在JavaScript编程中,开发者经常会遇到各种陷阱,这些陷阱通常源于语言的特性或者不常见的...在编写JavaScript时,要特别注意变量和函数的声明方式,以及它们的作用域和提升规则,这样才能有效地避免掉入这些“坑”。

    JavaScript10分钟速成(js-in-ten-minutes).pdf

    JavaScript 速成指南 JavaScript 是一种广泛使用的脚本语言,广泛应用于 web 开发、移动应用开发和桌面应用开发等领域。...但是,需要注意 JavaScript 中的一些坑和陷阱,以避免编码错误和安全问题。

    javascript踩坑记录

    javascript踩坑记录 大神分享。有需要的同学可以用来作为必坑指南。当然你也可以用里面的文档作为学习使用。 有需要的同学可以用来作为必坑指南。当然你也可以用里面的文档作为学习使用。 有需要的同学可以用来作为...

    盘点javascript 正则表达式中 中括号的【坑】

    但在字符组中,这些元字符不再作为控制符号,仅表示它们自身,这就造成了常见的“坑”。如果需要匹配包括换行符在内的任意字符,可以使用[\s\S],其中"\s"表示空白字符,"\S"表示非空白字符,组合在一起就可以匹配...

    Javascript中构造函数要注意的一些坑

    JavaScript中的构造函数是实现面向对象编程的关键,虽然它在语法上与传统的类概念有所不同。本文主要探讨了在使用JavaScript构造函数时需要注意的一些陷阱。 首先,构造函数本质上是可调用的函数,但它们的设计目的...

    自己收集JavaScript教程、源码、例子、注意点

    这些要点提醒我们在编写JavaScript时应保持警惕,避免常见的坑。 "JavaScript实用范例辞典.CHM"是一个典型的帮助文件格式,它可能包含了大量的JavaScript实用技巧和示例,方便快速查阅。CHM文件是Windows平台上的...

    JavaScript中使用typeof运算符需要注意的几个坑

    在JavaScript编程中,typeof运算符是一个非常常用的工具,用于判断变量或表达式的类型。然而,由于JavaScript语言的一些特性,使用typeof运算符时可能会遇到一些陷阱。以下是对这四个需要注意的问题的详细阐述: 1....

    详解JavaScript中的六种错误类型

    今天就带大家看一看JavaScript中常见的错误类型。 js中的控制台的报错信息主要分为两大类,第一类是语法错误,这一类错误在预解析的过程中如果遇到,就会导致整个js文件都无法执行。另一类错误统称为异常,这一类的...

    forrany#Web-Project#二、JavaScript排坑指南(二)1

    1. 数组的神奇变化 2.+ - 运算符之惑 3.堆栈溢出之谜 1. 异步 2. 闭包 5.回文判断

    浅谈关于JavaScript API设计的一些建议和准则

    5. “成功坑”效应:一个成功的API设计会将开发者“掉入”成功的坑中,即让开发者感到舒适和熟悉,从而建立起积极的使用体验。jQuery通过提供与CSS选择器语法一致的接口,使得开发者能够利用已有的CSS知识,快速上手...

Global site tag (gtag.js) - Google Analytics