JavaScript】【Web前端基础】每个JavaScript程序员应该知道什么

2020-11-11 09:44发布

5条回答
aijingda
2楼 · 2020-11-11 15:48

不是jQuery。不是YUI。不是(等)

框架可能很有用,但是它们经常隐藏一些关于JavaScript和DOM实际工作方式的丑陋细节。如果您的目标是能够说“我知道JavaScript”,那么在框架上投入大量时间是相反的。

以下是一些JavaScript语言功能,您应该了解这些功能在做什么并且不会被吸引住,但是对于许多人来说,它们并不是立即显而易见的:

  • object.propobject['prop']是同一件事(所以请您停止使用eval,谢谢);对象属性始终是字符串(即使是数组);什么for...... in是(和什么不是)。

  • 嗅探财产;什么undefined是(以及为什么闻到);为什么看似鲜为人知的in操作员是有益的并且不同于typeofundefined检查;hasOwnProperty; 目的delete

  • Number数据类型是一个真正的浮动; 使用浮点数与语言无关的困难;避免parseInt八进制陷阱。

  • 嵌套函数作用域;在var您要避免意外的全局范围内使用的必要性;范围如何用于闭包;在闭合回路问题。

  • 全局变量和window属性如何碰撞;全局变量和文档元素如何在IE中不应该冲突,而应该如何冲突?也必须var在全球范围内使用以避免这种情况。

  • function语句如何在定义之前的代码之前“ 提升 ”定义;函数语句和函数表达式之间的区别;为什么不应该使用命名函数表达式。

  • 构造函数的功能,prototype属性和new运算符的工作方式;利用此方法创建您实际想要的普通类/子类/实例系统的方法;当您可能想使用基于闭包的对象而不是原型时。(对此,大多数JS教程材料绝对是可怕的;花了我很多年才把它弄清楚。)

  • this通话时如何确定,不受限制;因此,方法传递不像您期望的其他语言那样有效;如何关闭或Function#bind可以用来解决这个问题。

  • 其他ECMAScript第五版功能indexOfforEach以及上的功能编程方法Array。如何修复旧版浏览器以确保您可以使用它们;将它们与内联匿名函数表达式一起使用,以获取紧凑,易读的代码。

  • 浏览器和用户代码之间的控制流;同步和异步执行;在控件流内部触发的事件(例如焦点)与控件返回时发生的事件和超时;如何调用所谓的同步内置alert函数最终会导致潜在的灾难性重入。

  • 跨窗口脚本编写如何影响instanceof;跨窗口脚本如何影响跨不同文档的控制流;postMessage希望如何解决这个问题。

有关最后两个项目,请参见此答案。

最重要的是,您应该批判性地查看JavaScript,并承认由于历史原因,它是一种不完善的语言(甚至比大多数语言还多),并且避免了最糟糕的麻烦。克罗克福德在这方面的工作绝对值得一读(尽管我并不100%同意他所说的“好零件”)。


水默
3楼 · 2020-11-12 11:53

1.Underscore和Lodash(dah)

可能大多数人都知道这两个库。Underscore的目的是为JavaScript中的常见任务提供实用的函数。Lodash是下载量最大和被依赖最多的库之一,旨在为数组、字符串、object和argument对象提供更一致的跨环境迭代支持,并已成为Underscore的超集。这两个库由相同的核心贡献者维护,在技术选型时完全可以考虑使用它们。

2. Ramda

在GitHub上的Star已经超过12,000,这个库专为函数式编程而设计,可以轻松创建不改变用户数据状态的函数式管道。Ramda的核心设计理念是创建具有不变性和无副作用的函数。所有的函数会被自动柯里化,并根据易用性安排参数的顺序。

3. MathJS

在GitHub上的Star已经超过6000,这个库是JavaScript和Node.js的数学扩展库,与JavaScript内置的Math库兼容。该库包含一个灵活的表达式解析器,能够运行符号计算,并提供了一系列内置函数和常量。用户还可以对其进行扩展。

4. Moment

在GitHub上的Star已经超过37,000,是一个JavaScript日期和时间操作库,用于解析、验证、操作和格式化日期。Moment可以在浏览器和Node.js中运行。从2.10.0版本开始迁移到ECMAScript 6。

5. Sugar

在GitHub上的Star已经超过3500,主要用于处理本地对象。这个库支持自定义构建,还提供了模块化的npm包,因此可以只使用其中必要的部分模块(也可以与Bit结合使用),用户还可以通过自定义方法或使用插件来应对特定的使用场景。

6. Lazy

在GitHub上的Star将近5000,是一个功能强大的JavaScript库,它的lazy引擎“尽可能地少做一些工作”,同时保持足够的灵活性。

7. CollectJS

在GitHub上的Star超过3200,主要用于处理JavaScript中的数组和对象,无需其他依赖,提供了几十个有用的功能和API,这些API几乎与Laravel Collections 5.5相同。该库的维护状态很活跃,值得关注。

8. ChanceJS

Chance在GitHub上的Star超过3200,一个简单的随机对象生成器,用于生成随机的字符串、数字等。在编写自动化测试代码或任何需要随机对象的地方,可以用它来减少单调的工作。


summer
4楼 · 2020-11-19 09:48

堆栈

队列

基本类型

值类型和引用类型

隐式, 显式, 名义和鸭子类型

函数作用域, 块级作用域和词法作用域


二小姐121314
5楼 · 2021-05-10 18:42

栈(想象成一叠盘子,FILO):

v8一开始会创建全局上下文和全局内存,全局对象一般是window(浏览器)或者global(node环境)也可以通过this引用它(创建阶段,变量都是undefined,变量提升到代码的开头)。开始执行代码的时候,会初始化创建阶段声明的变量(执行阶段)。

函数执行的时候也会创建函数执行上下文(this值是什么,全局的this指向window但是函数的this是由函数怎样被调用决定的,如果是对象调用就指向对象,否则就是全局,arguments对象)和本地内存(如果有变量或者函数的话,并且变量提升)并且将上下文入栈。一开始是main帧, 然后比如是fn1 fn2...。执行完该函数后,函数会出栈(栈帧被销毁)。栈是同步的。

创建阶段上下文主要做这三件事: 决定this 创建词法环境(LexicalEnvironment) 创建变量环境(VariableEnvironment)


靓猴一枚
6楼 · 2021-07-27 10:48

了解Crockford的Javascript:The Good Parts中的内容是一个很好的假设,即一个人是一个不错的JS程序员。


您几乎可以知道如何使用类似JQuery的良好库,而仍然不知道Javascript的隐藏部分。


另一个注意事项是各种浏览器上的调试工具。JS程序员应该知道如何在不同的浏览器中调试其代码。


哦! 而且知道JSLint会完全伤害您的感觉!!


相关问题推荐

  • 回答 8

    向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...

  • 回答 2

    我觉得getTopWindow() 应该是他自己写的函数 mask  应该是getTopWindow()函数中 return 出的一个什么玩意show()  jQuery的显示

  • 回答 9

    如图所示

  • 回答 12

    1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...

  • 回答 6

    使用VS code对JS进行Debug,需要安装一个插件,这个插件是根据你所使用的浏览器来的,不同浏览器对应插件不同,以下是插件对应情况,下载完相应的插件以后还要下载一个live server在浏览器下查看你界面运行效果,记得在到设置里修改下live server的端口号,然...

  • 回答 8
    已采纳

    没有基础,是可以学Java的,在网上也能找到很多免费的视频、学习资料等资源,只不过想要光靠自己摸索学透Java并不容易,最好是找一个比较靠谱的有实训的培训机构。不过,我给你点建议:1.脑子里要有编程思维,2.学习态度要有,3.了解了基本概念后,从图形界面...

  • 回答 7

    假设文本框的id=text1js:document.getElementById(text1).value = 测试;//即可

  • 回答 2

    这两个事件都是在js原生开发时经常会用到的,比如需要对页面dom进行动态处理,这时就需要用到DOMContentLoaded和[removed]事件,大家都知道,就是在dom构建完毕后,才可以对dom元素进行操作,否则会获取不到相应的dom元素,但是DOMContentLoaded和[removed]还...

  • 回答 11

    基本概念CookieCookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到记住密码,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。localStoragelocalStor...

  • 回答 2

    在vscode 头疼的问题是 用浏览器查看网页!会是以文件夹的方式打开的!  我遇到这个问题 我还重新配置了Apache    ! 但是现在可以解决:使用vscode  ==================== 打开cmd   : 在cmd 控制台中输入  :   1.运行cnpm install live-server...

  • 回答 1

    在进行对象之间的合并的时候,就会使用到extend方法进行合并语法结构:$.extend(true,{},对象1,对象2...)但是这里需要考虑一个问题,如果对象间有相同的属性名,就会涉及到哪一个对象和哪一个对象的值覆盖合并的问题,如果对象中的属性值还是一个对象的话,那...

  • 回答 5
    已采纳

    先说下要实现什么功能,比如:限制图片大小不能超过30K,宽高为121x75上面需求提了,然后我直接把代码给你放出来,可以照着下面代码敲一遍试试就知道怎么限制图片宽高了 $(#picFile4).on(change,function(){ var imgFile = this.files[0]; va...

  • 回答 3

    用python爬取近30天百度指数代码均转载,如下:#1.登录url = ‘http://index.baidu.com/’driver = webdriver.Chrome(executable_path=‘C:/Program Files(x86)/Google/Chrome/Application/chromedriver.exe’)driver.get(url)cookieList = [......

  • 回答 7

    基本类型基本类型分为以下六种:string(字符串)boolean(布尔值)number(数字)symbol(符号)null(空值)undefined(未定义)注意:string 、number 、boolean 和 null  undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类...

  • 回答 11

    实体类中添加时间转换注解(注意时区问题)12345/**  * 开始时间  */ @JsonFormat(pattern = yyyy-MM-dd HH:mm:ss, timezone=GMT+8) private Date startTime;

  • 回答 5

    实例中包含加、减、乘、除四种运算,由于先乘和除的优先级别高,所以乘和除将首先被运算,接下来是加和减运算。乘和除优先级相同,所以左边的乘法将被先执行,然后是除法,接下来按从左到右的顺序进行加减运算...

没有解决我的问题,去提问