我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript中常见的陷阱有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript中常见的陷阱有哪些

这篇文章主要讲解了“JavaScript中常见的陷阱有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript中常见的陷阱有哪些”吧!

1. 你是否尝试过对数组元素进行排序?

JavaScript默认使用字典序(alphanumeric)来排序。因此,[1,2,5,10].sort()的结果是[1, 10, 2, 5]。

如果你想正确的排序,应该这样做:[1,2,5,10].sort((a, b) => a - b)

2. new Date() 十分好用

new Date()的使用方法有:

不接收任何参数:返回当前时间;

接收一个参数x: 返回1970年1月1日 + x毫秒的值。

new Date(1, 1, 1)返回1901年2月1号。

然而….,new Date(2016, 1, 1)不会在1900年的基础上加2016,而只是表示2016年。

3. 替换函数没有真的替换?

let s = "bob"

const replaced = s.replace('b', 'l')

replaced === "lob" // 只会替换掉第一个b

s === "bob" // 并且s的值不会变

如果你想把所有的b都替换掉,要使用正则:

"bob".replace(/b/g, 'l') === 'lol'

4. 谨慎对待比较运算

// 这些可以

'abc' === 'abc' // true

1 === 1 // true

// 然而这些不行

[1,2,3] === [1,2,3] // false

{a: 1} === {a: 1} // false

{} === {} // false

因为[1,2,3]和[1,2,3]是两个不同的数组,只是它们的元素碰巧相同。因此,不能简单的通过===来判断。

5. 数组不是基础类型

typeof {} === 'object' // true

typeof 'a' === 'string' // true

typeof 1 === number // true

// 但是....

typeof [] === 'object' // true

如果要判断一个变量var是否是数组,你需要使用Array.isArray(var)。

6. 闭包

这是一个经典的JavaScript面试题:

const Greeters = []

for (var i = 0 ; i < 10 ; i++) {

Greeters.push(function () { return console.log(i) })

}

Greeters[0]() // 10

Greeters[1]() // 10

Greeters[2]() // 10

虽然期望输出0,1,2,…,然而实际上却不会。知道如何Debug嘛?

有两种方法:

使用let而不是var。备注:可以参考Fundebug的另一篇博客 ES6之”let”能替代”var”吗?

使用bind函数。备注:可以参考Fundebug的另一篇博客 JavaScript初学者必看“this”

Greeters.push(console.log.bind(null, i))

当然,还有很多解法。这两种是我最喜欢的!

7. 关于bind

下面这段代码会输出什么结果?

class Foo {

    constructor(name) {

        this.name = name

    }

    greet() {

        console.log('hello, this is ', this.name)

    }

    someThingAsync() {

        return Promise.resolve()

    }

    asyncGreet() {

        this.someThingAsync().then(this.greet)

    }

}

new Foo('dog').asyncGreet()

如果你说程序会崩溃,并且报错:Cannot read property ‘name’ of undefined。

1、因为第16行的geet没有在正确的环境下执行。当然,也有很多方法解决这个BUG!

我喜欢使用bind函数来解决问题:

asyncGreet () {

this.someThingAsync()

.then(this.greet.bind(this))

}

这样会确保greet会被Foo的实例调用,而不是局部的函数的this。

2、如果你想要greet永远不会绑定到错误的作用域,你可以在构造函数里面使用bind来绑 。

class Foo {

    constructor(name) {

        this.name = name this.greet = this.greet.bind(this)

    }

}

3、你也可以使用箭头函数(=>)来防止作用域被修改。备注:可以参考Fundebug的另一篇博客 JavaScript初学者必看“箭头函数”。

asyncGreet() {

    this.someThingAsync().then(() = >{

        this.greet()

    })

}

8. Math.min()比Math.max()大

Math.min() < Math.max() // false

感谢各位的阅读,以上就是“JavaScript中常见的陷阱有哪些”的内容了,经过本文的学习后,相信大家对JavaScript中常见的陷阱有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript中常见的陷阱有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

web网页抓取中的常见陷阱有哪些

本篇内容主要讲解“web网页抓取中的常见陷阱有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web网页抓取中的常见陷阱有哪些”吧!  1、更改页面的HTML  这是网页抓取脚本停止工作的最常
2023-06-21

C++ 函数异常处理中常见陷阱有哪些?

c++++ 函数异常处理中常见的陷阱:避免在异常处理块中返回局部变量引用或指针,以免指向无效内存。异常处理块中不要重复抛出异常,以免覆盖原始异常信息。谨慎使用 noexcept 指定符,确保函数确实不会抛出异常。使用智能指针和异常规范,以提
C++ 函数异常处理中常见陷阱有哪些?
2024-04-24

python使用语句的常见陷阱有哪些

这篇文章主要为大家展示了“python使用语句的常见陷阱有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python使用语句的常见陷阱有哪些”这篇文章吧。1、冗余input语句的冗余使用,这
2023-06-20

Python量化回测常见陷阱有哪些

这篇文章主要介绍“Python量化回测常见陷阱有哪些”,在日常操作中,相信很多人在Python量化回测常见陷阱有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python量化回测常见陷阱有哪些”的疑惑有所
2023-06-02

Golang 技术性能优化中的常见陷阱有哪些?

避免 go 语言性能优化中的陷阱:过早优化:在基准测试确定瓶颈前避免优化。过度使用 goroutine:明智地使用 goroutine,考虑替代的并发机制。不正确的内存分配:避免重复分配,考虑使用内存池。不恰当的同步:仅同步必要的代码块,使
Golang 技术性能优化中的常见陷阱有哪些?
2024-05-11

C++ 函数错误处理中常见陷阱有哪些?

c++++ 函数错误处理的常见陷阱包括:过度使用异常跳过错误检查释放资源不当不检查函数参数的有效性忽略警告将错误混入数据避免这些陷阱可确保编写可靠、可维护的 c++ 代码。C++ 函数错误处理中的常见陷阱在 C++ 中编写健壮可靠程序时,
C++ 函数错误处理中常见陷阱有哪些?
2024-04-23

软考选择题中常见的陷阱有哪些?如何避免?

在软考中,选择题是常见的题型之一。然而,由于选择题的特殊性质,考生在做题时容易陷入一些陷阱,导致失分。那么,软考选择题中常见的陷阱有哪些呢?又该如何避免呢?具体请见下文。
软考选择题中常见的陷阱有哪些?如何避免?
2024-10-08

MySQL增删改查方法与常见陷阱有哪些

本文小编为大家详细介绍“MySQL增删改查方法与常见陷阱有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL增删改查方法与常见陷阱有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、MySQL的增
2022-11-30

JavaScript 继承的陷阱:避免常见的错误

JavaScript 继承陷阱:警惕常见错误以确保代码健壮性
JavaScript 继承的陷阱:避免常见的错误
2024-02-15

Golang API应避免哪些常见的性能陷阱?

避免 go api 性能陷阱的最佳实践:使用更精细的锁机制,如读写锁或互斥锁,以避免全局锁的性能影响。控制通道使用,避免死锁和资源泄漏。使用缓冲通道提高性能,避免未缓冲通道的阻塞。优化序列化/反序列化性能敏感数据,或直接操作原始数据。充分利
Golang API应避免哪些常见的性能陷阱?
2024-05-07

C++ 元编程的最佳实践和常见陷阱有哪些?

元编程是一种编译时代码操作技术,提供了代码通用化、高效化、易维护等优点。最佳实践包括隔离元编程代码、使用类型安全、清晰命名、单元测试和文档化。常见陷阱有可扩展性问题、调试困难、维护挑战、性能问题和代码复杂性。元编程可用于创建可变长元组等高级
C++ 元编程的最佳实践和常见陷阱有哪些?
2024-05-21

JavaScript错误处理的常见错误和陷阱

在JavaScript开发中,错误处理是很重要的一个环节,错误处理一般通过try…catch语句来实现。本文探讨了JavaScript错误处理中常见的错误和陷阱,并给出了避免这些错误和陷阱的建议。
JavaScript错误处理的常见错误和陷阱
2024-02-27

PHP 函数命名中应该避免哪些常见陷阱?

针对 php 函数命名陷阱,建议遵循以下准则:使用描述性名称;确保参数顺序一致;避免使用静态变量命名;谨慎使用缩写;区分大小写。PHP 函数命名:避开常见陷阱在 PHP 函数命名中,遵循约定至关重要,以确保代码的可读性和可维护性。以下是一
PHP 函数命名中应该避免哪些常见陷阱?
2024-04-21

JavaScript RegExp 方法的陷阱:避免常见的错误

了解 JavaScript RegExp 方法的陷阱至关重要,以避免编码错误并编写稳健的正则表达式。本文探讨了常见的错误并提供了避免它们的技巧,确保代码的可靠性和效率。
JavaScript RegExp 方法的陷阱:避免常见的错误
2024-03-09

编程热搜

目录