好程序员web前端分享js技巧和js中一些常见的陷阱

  • 时间:
  • 浏览:0

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

[1,2,5,10].sort((a, b) => a - b)

let s = "bob"

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

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

s === "bob" // 而是s的值不不变

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

asyncGreet () {

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

}

那我会确保greet会被Foo的实例调用,而非要局部的函数的this。

我喜欢使用bind函数来除理间题报告 :

class Foo {

}

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

1、将会第16行的geet没有 在正确的环境下执行。当然,非要有些土办法除理有并否是BUG!

// 哪几种非要

'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]是有一一个 不同的数组,而是它们的元素碰巧相同。而是,非要简单的通过===来判断。

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嘛?

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

new Date()的使用土办法有:

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

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

好应用应用程序员web前端分享js技巧和js中有些常见的陷阱。

class Foo {

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

当然,还有有些解法。这有并否是是我最喜欢的!

然而….,new Date(2016, 1, 1)不什么都没有1900年的基础去掉 2016,而而是表示2016年。

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

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

将会你想正确的排序,应该那我做:

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

asyncGreet() {

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

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

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

typeof 1 === number // true

// 而是....

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

将会要判断有一一个 变量var否是数组,你非要使用Array.isArray(var)。

2、将会你愿意greet永远不不绑定到错误的作用域,愿意在构造函数底下使用bind来绑 。

有有并否是土办法:

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

}

下面这段代码会输出哪几种结果?

}

new Foo('dog').asyncGreet()

将会你说哪几种应用应用程序会崩溃,而是报错:Cannot read property ‘name’ of undefined。