JavaScript代码日常注意六点

大家在日常JavaScript开发中都需要注意一些代码是否会出错,而我们今天来总结一下JavaScript中日常开发需要注意的六点易错部分,相信很多同学都需要来看看哦!废话少说我们直接开始进入正题吧!

立即执行函数

立即执行函数,通常也可作闭包,能够构造一个函数级别的变量作用域。一般写法如下:

(function () {  // code})();

登录后复制

但是这中写法容易造成一些问题,如上面的代码如果没有分号结尾的话:

var a = 1(function () { // Uncaught TypeError: 1 is not a function})()

登录后复制

那么应该这样写:

void function () {  // code}();

登录后复制

或者:

!function () {  // code}();

登录后复制

;(function(){   //code})()

登录后复制

选择哪种看个人喜好,现在js中有个规范叫standardjs规范, 提倡省略行尾的分号(个人不太习惯),需要改变这个习惯。

2.空对象null

从JS诞生以来,赋予了null为Object类型,可以说是JS的一个终生bug,从未、以后也不会改变。

null不具备作为对象的基本特征,属于原始数据类型。我想说明的是在判断一个变量是否是对象之前,应该先判断其是否为null。

if (opt!== null && typeof opt=== 'object') {  // opt是一个对象}

登录后复制

3.不要随意对小数做比较

在做小数之间的计算时候,注意浮点数之前的精度问题。

如:0.1+0.2是否等于0.3?  答案是:0.1+0.2=0.30000000000000004

类似:0.4-0.3=0.10000000000000003

如果存在此类计算,那么先把小数转为字符串,使用toFixed去小数若干位进行比较:

(0.1 + 0.2).toFixed(2) === '0.30'

登录后复制

注意:两个数的差值小到一定范围的时候,即可以认为他们是相等的。

Math.abs(0.1+0.2 - 0.3) <= 1e-10 // true

登录后复制

 4.时刻记住NaN

一说到NaN,那么有个特性大伙应该都会想起,NaN !==NaN。对,就这么屌。

如果你需要判断一个变量是否为NaN,只需要把它跟它自己比较,如果不相等,那么就是NaN。

判断一个数字是否为NaN,可以使用isNaN()方法。但是如果不知道某个变量的具体数据类型的时候,不要轻易用该方法来判断,因为isNaN有个诡异特性:它会先把要判断的变量先转换成数值来计算。

isNaN('abc') // trueisNaN('123') // falseisNaN('') // falseisNaN([]) // falseisNaN({}) // true

登录后复制

那么这时候会对你的判断结果造成意外。

还有一个注意点就是,永远不要拿任何变量跟NaN来比较,如:opt===NaN。

5.除了比较null和undefined,永远不要使用非严格==和!=

相信你会看到很多文章、规范都会说尽量使用===和!==,不使用==和!=,原因在于后者会进行强制类型转换(造成难以查找的bug)。

先看一下:

'true' == true // => false'true' == false // => false[] == {} // => false[] == [] // => false

登录后复制

如果你对以上判断存在疑惑,那就记住一个规则:

null == null // => trueundefined == undefined  // => truenull == undefined // => trueundefined == null // => truex == null // => false (x 非 null 或 undefined)x == undefined // => false (x 非 null 或 undefined)

登录后复制

也即是判断x是否为null或者undefined,那么就用==,否则,永远不要使用。

6.慎用 || 设置默认值

给一个变量设置一个默认值,相信入坑多年的JS开发者都会这样写:

page = page || 0;data = data || '你好';

登录后复制

解释下arg1 || arg2的意思是如果arg1能够转换为true,那么就取arg1,否则取arg2。

那么我们先看一下不可以转化为true的值有哪些?

1.undefined

2.null

3.NaN

4.整数0

5.空字符串 “ ”

所以如果当用户传给arg1的参数是0或者为空字符串“”的时候,那么最终的值就会取默认的(||后面)值是不是?好,问题来了。如果用户传给后台的查询关键字data(上面代码)是空字符串“”,那么就应该按照空字符串“”去后台数据库查询,而结果传给后台的却是“你好”,显然查询结果也就不对。

好,回到主题,实际上只有undefined才应该被认为是用户没有指定其具体值,我曾看过有人这样理解(null 表示 用户让你给他把这个位置空着;而 undefined 表示 用户没发表意见

so :

page = page !== undefined ? page : 0;data = data !== undefined ? data :'你好';

登录后复制

只需判断undefined即可。

个人理解如果有需求,可以把null加进去判断。

以上就是JavaScript代码日常注意六点的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2783042.html

(0)
上一篇 2025年3月8日 16:43:13
下一篇 2025年3月8日 16:43:21

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 日常js开发规范

    本篇文章我们来讲一下JavaScript日常开发规范,让大家往后的JavaScript日常开发写出的js代码更规范,感兴趣的同学可以来看看本篇文章!日常开发规范还是很重要的哦! 前端入坑依赖前前后后写了好几个项目,在用javascript写…

    编程技术 2025年3月8日
    200
  • javascript中call详解

    这次给大家带来javascript中call详解,使用javascript中call的注意事项有哪些,下面就是实战案例,一起来看一下。 首先要先了解在函数本身会有一些自己的属性,比如: length:形参的个数; name:函数名; pro…

    编程技术 2025年3月8日
    200
  • javascript中call与apply以及bind有哪些不同

    这次给大家带来javascript中call与apply以及bind有哪些不同,javascript中call与apply以及bind使用的注意事项有哪些,下面就是实战案例,一起来看一下。 首先补充严格模式这个概念,这是ES5中提出的,只要…

    编程技术 2025年3月8日
    200
  • javascript中call与apply的应用

    这次给大家带来javascript中call与apply的应用,javascript中call与apply应用的注意事项有哪些,下面就是实战案例,一起来看一下。 求数组的最大值和最小值 定义一个数组: var ary = [23, 34, …

    编程技术 2025年3月8日
    200
  • 细说VueJS生命周期与钩子函数应用详解

    本篇文章讲述了VueJS的生命周期和其中钩子函数的应用,大家对VueJS的生命周期和其中钩子函数的应用不了解的话那么我们就一起来看看本篇文章吧, 好了废话少说进入正题吧 朋友你好!很幸运的,我的文章能够被你看到,那么此时你应该想对vuejs…

    2025年3月8日
    200
  • JavaScript中的冒泡排序详解

    本篇文章讲述了javascript中的冒泡排序,大家对javascript中的冒泡排序不了解的话那么我们就一起来看看本篇文章吧,利用javascript简单的实现了冒泡排序,好了废话少说进入正题吧! 冒泡排序 作为最简单的排序算法之一,冒泡…

    2025年3月8日
    200
  • js设计模式之-单例模式的使用

    这次给大家带来js设计模式之-单例模式的使用,使用js单例模式的使用注意事项有哪些,下面就是实战案例,一起来看一下。 1、概念:        在传统的开发工程师眼里,单利模式就是保证每一个类只有一个实例,我们在实现时首先判断实例是否存在,…

    编程技术 2025年3月8日
    200
  • JavaScript中的插入排序详解

    本篇文章讲述了javascript中的插入排序,大家对javascript中的插入排序不了解的话那么我们就一起来看看本篇文章吧,本文章利用javascript简单的实现了插入排序,好了废话少说进入正题吧 JavaScript中的插入排序 插…

    2025年3月8日
    200
  • JS的设计模式之构造函数模式详解

    这次给大家带来js的设计模式之构造函数模式详解,使用js构造函数模式的注意事项有哪些,下面就是实战案例,一起来看一下。 概念 构造函数用于创建特定类型的对象,我们在里面不仅声明了使用的对象,构造函数还可以接受参数以便于第一次创建的时候设置对…

    编程技术 2025年3月8日
    200
  • JavaScript中的希尔排序详解

    本篇文章讲述了javascript中的希尔排序,大家对javascript中的希尔排序不了解的话或者对javascript中的希尔排序感兴趣的话那么我们就一起来看看本篇文章吧, 好了废话少说进入正题吧! JavaScript中的希尔排序 希…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论