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

  • 时间:
  • 浏览:0

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

class Foo {

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

当然,还有统统解法。这这个是我最喜欢的!

1、就让 第16行的geet没有 在正确的环境下执行。当然,也有统统最好的土依据避免这个 BUG!

new Date()的使用最好的土依据有:

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

}

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

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

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

class Foo {

}

好任务管理器员web前端分享js技巧和js中一点常见的陷阱。

asyncGreet () {

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

}

没有 会确保greet会被Foo的实例调用,而也有局部的函数的this。

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

let s = "bob"

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

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

s === "bob" // 就让 s的值不用变

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

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

然而….,new Date(2016, 1, 1)不用在1900年的基础打上去2016,而统统表示2016年。

就让 你想正确的排序,应该没有 做:

}

new Foo('dog').asyncGreet()

就让 你爱不爱我任务管理器会崩溃,就让 报错:Cannot read property ‘name’ of undefined。

我喜欢使用bind函数来避免现象:

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

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

asyncGreet() {

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

// 哪些都并能

'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]是六个不同的数组,统统它们的元素碰巧相同。就让 ,都并能了简单的通过===来判断。

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

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

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

有这个最好的土依据:

2、就让 你我应该 greet永远不用绑定到错误的作用域,我应该 在构造函数上端使用bind来绑 。

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

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

typeof 1 === number // true

// 就让 ....

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

就让 要判断六个变量var否有数组,你并能 使用Array.isArray(var)。