js初学者应该知道的技巧和陷阱
这里有一些 Javascript初学者应该知道的技巧和陷阱。如果你已经是专家了,顺便温习一下。
Javascript也只不过是一种编程语言。怎么可能出错嘛?
1. 你有没有尝试给一组数字排序?
Javascript 的sort()
函数在默认情况下使用字母数字(字符串Unicode码点)排序。
所以[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 毫秒。 了解 Unix 的人知道为什么。new Date(1, 1, 1) 返回 1901, 二月 , 1号\。因为,第一个参数表示1900年加1年,第二个参数表示这一年的第二个月(因此是二月) — 脑回路正常的人会从1开始索引 — ,第三个参数很明显是这个月的第一天,所以1 — 有时候索引确实从1开始 — 。
new Date(2016, 1, 1) 不会给1900年加上2016。它仅代表2016年。
3. Replace 并不“替代”
let s = "bob"const replaced = s.replace('b', 'l') replaced === "lob" s === "bob"
我觉得这是一件好事,因为我不喜欢函数改变它们的输入。 你还应该知道 replace
只会替换第一个匹配的字符串:
如果你想替换所有匹配的字符串,你可以使用带/g
标志的正则表达式 :
"bob".replace(/b/g, 'l') === 'lol' // 替换所有匹配的字符串
4. 比较的时候要注意
// These are ok'abc' === 'abc' // true1 === 1 // true// These are not [1,2,3] === [1,2,3] // false {a: 1} === {a: 1} // false {} === {} // false
原因:[1,2,3]和[1,2,3]是两个独立的数组。它们只是恰好包含相同的值。它们具有不同的引用,无法用===
相比较。
5. 数组不是原始数据类型
typeof {} === 'object' // truetypeof 'a' === 'string' // truetypeof 1 === number // true// But....typeof [] === 'object' // true
如果你想知道你的变量是不是数组,你仍然可以用Array.isArray(myVar)
6. 闭包
这是一个很有名的面试题:
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… ? 你知道它为什么不是这样输出的吗? 你会怎样修改让它输出 0, 1, 2… ?
这里有两种可能的解决方法:
用 let
替代 var
. Boom. 解决了.
let
和var
的不同在于作用域。var
的作用域是最近的函数块,let
的作用域是最近的封闭块,封闭块可以小于函数块(如果不在任何块中,则let
和var
都是全局的)。(来源)
替代方法: 用 bind:
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
,给你一分。
原因: greet
没有在正确的上下文中运行。同样,这个问题依然有很多解决方案。
我个人喜欢
asyncGreet () {this.someThingAsync() .then(this.greet.bind(this)) }
这样可以确保类的实例作为上下文调用greet
。
如果你认为greet
不应该在实例上下文之外运行, 你可以在类的constructor中绑定它:
class Foo {constructor (name) {this.name = namethis.greet = this.greet.bind(this) } }
你还应该知道箭头函数( =>
)可以用来保留上下文。这个方法也可以:
asyncGreet () {this.someThingAsync() .then(() => {this.greet() }) }
尽管我认为最后一种方法并不优雅。
我很高兴我们解决了这个问题。
总结
祝贺你,你现在可以放心地把你的程序放在互联网上了。甚至运行起来可能都不会出岔子(但是通常会)Cheers \o/
如果还有什么我应该提到的,请告诉我!
以上是js初学者应该知道的技巧和陷阱的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

硬盘序列号是硬盘的一个重要标识,通常用于唯一标识硬盘以及进行硬件识别。在某些情况下,我们可能需要查询硬盘序列号,比如在安装操作系统、查找正确设备驱动程序或进行硬盘维修等情况下。本文将介绍一些简单的方法,帮助大家查询硬盘序列号。方法一:使用Windows命令提示符打开命令提示符。在Windows系统中,按下Win+R键,输入"cmd"并按下回车键即可打开命

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤,需要具体代码示例随着互联网和科技的快速发展,股票交易已经成为许多投资者的重要途径之一。而股票分析是投资者决策的重要一环,其中蜡烛图被广泛应用于技术分析中。学习如何使用PHP和JS绘制蜡烛图将为投资者提供更多直观的信息,帮助他们更好地做出决策。蜡烛图是一种以蜡烛形状来展示股票价格的技术图表。它展示了股票价格的

人脸检测识别技术已经是一个比较成熟且应用广泛的技术。而目前最为广泛的互联网应用语言非JS莫属,在Web前端实现人脸检测识别相比后端的人脸识别有优势也有弱势。优势包括减少网络交互、实时识别,大大缩短了用户等待时间,提高了用户体验;弱势是:受到模型大小限制,其中准确率也有限。如何在web端使用js实现人脸检测呢?为了实现Web端人脸识别,需要熟悉相关的编程语言和技术,如JavaScript、HTML、CSS、WebRTC等。同时还需要掌握相关的计算机视觉和人工智能技术。值得注意的是,由于Web端的计

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

随着互联网金融的迅速发展,股票投资已经成为了越来越多人的选择。而在股票交易中,蜡烛图是一种常用的技术分析方法,它能够显示股票价格的变化趋势,帮助投资者做出更加精准的决策。本文将通过介绍PHP和JS的开发技巧,带领读者了解如何绘制股票蜡烛图,并提供具体的代码示例。一、了解股票蜡烛图在介绍如何绘制股票蜡烛图之前,我们首先需要了解一下什么是蜡烛图。蜡烛图是由日本人

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest
