`
axl234
  • 浏览: 260599 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

易让人忽视的JAVASCRIPT陷阱

 
阅读更多

parseInt
parseInt是将字符串转换为整数的函数,这个函数有个基模式参数,该参数默认是10,即以将字符串转换为十进制的整数。当字符串以0开头时,JavaScript会八进制方式求值。

PLAIN TEXT
JAVASCRIPT:
var s = '08';
parseInt(s); //0
parseInt(s, 10); //8
上面的代码中,第二行是忽略了基模式参数,当遇上字符串08时,JavaScript会用八进制方式来求值,而8在八进制中不是一个有效数字,所以求值结果是0。第三行是为parseInt指定了基模式是10,所以按着十进制方式求值后,结果为8,该结果正确。所以在使用parseInt时带上基模式参数是一个好习惯。

 

typeof
typeof是返回一个用来表示表达式的数据类型的字符串。下面几种情况返回的类型值是错误的:

PLAIN TEXT
JAVASCRIPT:
typeof null; //object, not null
上面的代码中,检查null的类型返回object,而并非null。

PLAIN TEXT
JAVASCRIPT:
var a = new String('Hello');
typeof a; //object, not string
上面的代码中,检查字符串Hello的类型返回object,而并非string。对于Boolean、Number等简单数据类型也存在同样的错误。解决方法是封装自己的类型检查函数:

function isString(object) {
    return Object.prototype.toString.call(object) == "[object String]";
}
var a = new String('Hello');
isString(a); //true

 


NaN
表示算术表达式返回非数字值的特殊值。NaN 不与任何值相等,包括其本身。

PLAIN TEXT
JAVASCRIPT:
NaN === NaN; //false
typeof NaN; //number
isNaN(NaN); //true
上面的代码中,第一行验证了NaN不与任何值相等。第二行与第三行有点矛盾,第二行显示NaN的类型为number,第三行却实现NaN不是一个数字类型的值,因此还是封装一个数字类型的检查函数保险。

function isNumber(object) {
    return Object.prototype.toString.call(object) == "[object Number]";
}

 


隐形Boolean转换
在流程控制的条件中,如果条件变量不是布尔类型值,JavaScript会对条件变量做隐性:'',NaN,null,undefined,0这几个转换为false,其他值都转换为true。特别需要注意的是,只有空字符串转换为false,其他非空字符串都会转换为true,这里尤其要小心的是'0',它也被认为是true(因为它非空嘛)。

 

 

比较大小
编程时经常会在条件判断中比较两个数值的大小,当被比较的两个变量都是数值类型时,不会产生问题,假如双方为字符串类型时,比较就可能产生问题了。

PLAIN TEXT
JAVASCRIPT:
'10'>'2' //false
上面的代码返回false,原因比较两个字符串是根据字符本身的ASCII码的大小,从左往右进行比较。'1'的ASCII码是49,'2'的ASCII码是50,所以'10'小于'2'。为了避免字符串比较带来的问题,比较前最好确保所比较的变量都是数值类型(至少保证一方为数值,在比较时会先将另一方隐性转换为数值类型,再做比较)。

分享到:
评论

相关推荐

    JavaScript性能陷阱小结(附实例说明)

    JavaScript陷阱太多,因此我们得步步为营,下面这些点,相信很多同学都会遇到,希望朋友们多注意下。JavaScript陷阱太多,因此我们得步步为营,下面是一些常见的影响性能的陷阱。

    javascript-gotchas:javascript 陷阱

    javascript 陷阱 javascript 陷阱

    Javascript中的陷阱大集合【译】

    Javascript中的陷阱大集合【译】 总结了Javascript的各种陷阱,很棒

    深入理解JavaScript系列

    本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法...

    JavaScript的9个陷阱及评点

    来自 Nine Javascript Gotchas , 以下是JavaScript容易犯错的九个陷阱。虽然不是什么很高深的技术问题,但注意一下,会使您的编程轻松些,即所谓make life easier. 笔者对某些陷阱会混杂一些评点。

    javascript帮助文档javascript帮助文档

    javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档javascript帮助文档

    Effective JavaScript

    由于其语法让人联想到Java,并且具有许多脚本语言的共同特性(如函数、数组、字典和正则表达式),因此,具有少量编程经验的人也能够快速学习JavaScript。新手程序员几乎不需要培训就可以开始编写程序,这要归功于...

    Google V8学习手记,月javascript写服务器端是多少人的梦醒呀,Google v8让javascript和php一样

     2.5 在C++中“声明”“Javascript类”, 供Javascript实例化  2.6 封装完整的C++类到Javascript中,供Javascript实例化 三、Google v8的开源应用  3.1 Node.js  3.2 v8cgi 四、参考资料 五、本文源码

    极易被忽视的javascript面试题七问七答

    主要为大家详细介绍了一道极易被忽视的javascript面试题七问七答,感兴趣的小伙伴们可以参考一下

    JavaScript语言精粹

    Douglas Crockford 在本书中剥开了JavaScript 沾污的外衣,抽离出一个具有更好可靠性、可读性和可维护性的JavaScript 子集,让你看到一门优雅的、轻量级的和非常富有表现力的语言。作者从语法、对象、函数、继承、...

    JavaScript手册 JavaScript手册

    JavaScript手册 JavaScript手册 JavaScript手册

    帮助避免错误的Javascript陷阱清单

    帮助避免错误的Javascript陷阱清单(Javascript Gotchas listed to help avoid mistakes)

    JavaScript语言参考手册

    因为 JavaScript 是分成几层按级实现的,它的文档就要分成好几本书以便适应不同人的需要。在线 JavaScript 参考的完美组合包括: JavaScript 指南提供了关于核心 JavaScript 语言及客户端对象的信息。 编写...

    [JavaScript权威指南(第6版)]

    《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...

    编写可维护的JavaScript

    《编写可维护的JavaScript》向开发人员阐述了如何在团队开发中编写具备...《编写可维护的JavaScript》适合前端开发工程师、JavaScript程序员和学习JavaScript编程的读者阅读,也适合开发团队负责人、项目负责人阅读。

    深入理解JavaScript系列(.chm)

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...

    javascript混淆,javascript压缩,javascript加密软件

    javascript混淆,javascript压缩,javascript加密

    JavaScript征途

    《JavaScript征途》是一本学习JavaScript语言的权威书籍,在遵循语言学习的特殊规律基础上精心选材,力争做到统筹、有序,在结构上体现系统性和完整性。同时还重点挖掘JavaScript基于对象的开发精髓及函数式编程两个...

    javascript网页版二人对战象棋

    纯javascript网页版二人对战象棋,直接点击运行即可

    简单易读的JavaScript编写的最小编译器

    一个超级简单的编译器的例子,包含了现代编译器的几个主要部分,用简单易读的 JavaScript 编写

Global site tag (gtag.js) - Google Analytics