2020-11-11 09:44发布
不是jQuery。不是YUI。不是(等)
框架可能很有用,但是它们经常隐藏一些关于JavaScript和DOM实际工作方式的丑陋细节。如果您的目标是能够说“我知道JavaScript”,那么在框架上投入大量时间是相反的。
以下是一些JavaScript语言功能,您应该了解这些功能在做什么并且不会被吸引住,但是对于许多人来说,它们并不是立即显而易见的:
那object.prop和object['prop']是同一件事(所以请您停止使用eval,谢谢);对象属性始终是字符串(即使是数组);什么for...... in是(和什么不是)。
object.prop
object['prop']
eval
for
in
嗅探财产;什么undefined是(以及为什么闻到);为什么看似鲜为人知的in操作员是有益的并且不同于typeof/ undefined检查;hasOwnProperty; 目的delete。
undefined
typeof
hasOwnProperty
delete
该Number数据类型是一个真正的浮动; 使用浮点数与语言无关的困难;避免parseInt八进制陷阱。
Number
parseInt
嵌套函数作用域;在var您要避免意外的全局范围内使用的必要性;范围如何用于闭包;在闭合回路问题。
var
全局变量和window属性如何碰撞;全局变量和文档元素如何在IE中不应该冲突,而应该如何冲突?也必须var在全球范围内使用以避免这种情况。
window
function语句如何在定义之前的代码之前“ 提升 ”定义;函数语句和函数表达式之间的区别;为什么不应该使用命名函数表达式。
function
构造函数的功能,prototype属性和new运算符的工作方式;利用此方法创建您实际想要的普通类/子类/实例系统的方法;当您可能想使用基于闭包的对象而不是原型时。(对此,大多数JS教程材料绝对是可怕的;花了我很多年才把它弄清楚。)
prototype
new
this通话时如何确定,不受限制;因此,方法传递不像您期望的其他语言那样有效;如何关闭或Function#bind可以用来解决这个问题。
this
Function#bind
其他ECMAScript第五版功能indexOf,forEach以及上的功能编程方法Array。如何修复旧版浏览器以确保您可以使用它们;将它们与内联匿名函数表达式一起使用,以获取紧凑,易读的代码。
indexOf
forEach
Array
浏览器和用户代码之间的控制流;同步和异步执行;在控件流内部触发的事件(例如焦点)与控件返回时发生的事件和超时;如何调用所谓的同步内置alert函数最终会导致潜在的灾难性重入。
alert
跨窗口脚本编写如何影响instanceof;跨窗口脚本如何影响跨不同文档的控制流;postMessage希望如何解决这个问题。
instanceof
postMessage
有关最后两个项目,请参见此答案。
最重要的是,您应该批判性地查看JavaScript,并承认由于历史原因,它是一种不完善的语言(甚至比大多数语言还多),并且避免了最糟糕的麻烦。克罗克福德在这方面的工作绝对值得一读(尽管我并不100%同意他所说的“好零件”)。
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,一个简单的随机对象生成器,用于生成随机的字符串、数字等。在编写自动化测试代码或任何需要随机对象的地方,可以用它来减少单调的工作。
队列
栈(想象成一叠盘子,FILO):
v8一开始会创建全局上下文和全局内存,全局对象一般是window(浏览器)或者global(node环境)也可以通过this引用它(创建阶段,变量都是undefined,变量提升到代码的开头)。开始执行代码的时候,会初始化创建阶段声明的变量(执行阶段)。
函数执行的时候也会创建函数执行上下文(this值是什么,全局的this指向window但是函数的this是由函数怎样被调用决定的,如果是对象调用就指向对象,否则就是全局,arguments对象)和本地内存(如果有变量或者函数的话,并且变量提升)并且将上下文入栈。一开始是main帧, 然后比如是fn1 fn2...。执行完该函数后,函数会出栈(栈帧被销毁)。栈是同步的。
创建阶段上下文主要做这三件事: 决定this 创建词法环境(LexicalEnvironment) 创建变量环境(VariableEnvironment)
了解Crockford的Javascript:The Good Parts中的内容是一个很好的假设,即一个人是一个不错的JS程序员。
您几乎可以知道如何使用类似JQuery的良好库,而仍然不知道Javascript的隐藏部分。
另一个注意事项是各种浏览器上的调试工具。JS程序员应该知道如何在不同的浏览器中调试其代码。
哦! 而且知道JSLint会完全伤害您的感觉!!
向一个对象数组里面添加新的属性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...
我觉得getTopWindow() 应该是他自己写的函数 mask 应该是getTopWindow()函数中 return 出的一个什么玩意show() jQuery的显示
如图所示
1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...
使用VS code对JS进行Debug,需要安装一个插件,这个插件是根据你所使用的浏览器来的,不同浏览器对应插件不同,以下是插件对应情况,下载完相应的插件以后还要下载一个live server在浏览器下查看你界面运行效果,记得在到设置里修改下live server的端口号,然...
没有基础,是可以学Java的,在网上也能找到很多免费的视频、学习资料等资源,只不过想要光靠自己摸索学透Java并不容易,最好是找一个比较靠谱的有实训的培训机构。不过,我给你点建议:1.脑子里要有编程思维,2.学习态度要有,3.了解了基本概念后,从图形界面...
假设文本框的id=text1js:document.getElementById(text1).value = 测试;//即可
这两个事件都是在js原生开发时经常会用到的,比如需要对页面dom进行动态处理,这时就需要用到DOMContentLoaded和[removed]事件,大家都知道,就是在dom构建完毕后,才可以对dom元素进行操作,否则会获取不到相应的dom元素,但是DOMContentLoaded和[removed]还...
基本概念CookieCookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到记住密码,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。localStoragelocalStor...
在vscode 头疼的问题是 用浏览器查看网页!会是以文件夹的方式打开的! 我遇到这个问题 我还重新配置了Apache ! 但是现在可以解决:使用vscode ==================== 打开cmd : 在cmd 控制台中输入 : 1.运行cnpm install live-server...
在进行对象之间的合并的时候,就会使用到extend方法进行合并语法结构:$.extend(true,{},对象1,对象2...)但是这里需要考虑一个问题,如果对象间有相同的属性名,就会涉及到哪一个对象和哪一个对象的值覆盖合并的问题,如果对象中的属性值还是一个对象的话,那...
先说下要实现什么功能,比如:限制图片大小不能超过30K,宽高为121x75上面需求提了,然后我直接把代码给你放出来,可以照着下面代码敲一遍试试就知道怎么限制图片宽高了 $(#picFile4).on(change,function(){ var imgFile = this.files[0]; va...
用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 = [......
基本类型基本类型分为以下六种:string(字符串)boolean(布尔值)number(数字)symbol(符号)null(空值)undefined(未定义)注意:string 、number 、boolean 和 null undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类...
实体类中添加时间转换注解(注意时区问题)12345/** * 开始时间 */ @JsonFormat(pattern = yyyy-MM-dd HH:mm:ss, timezone=GMT+8) private Date startTime;
实例中包含加、减、乘、除四种运算,由于先乘和除的优先级别高,所以乘和除将首先被运算,接下来是加和减运算。乘和除优先级相同,所以左边的乘法将被先执行,然后是除法,接下来按从左到右的顺序进行加减运算...
最多设置5个标签!
不是jQuery。不是YUI。不是(等)
框架可能很有用,但是它们经常隐藏一些关于JavaScript和DOM实际工作方式的丑陋细节。如果您的目标是能够说“我知道JavaScript”,那么在框架上投入大量时间是相反的。
以下是一些JavaScript语言功能,您应该了解这些功能在做什么并且不会被吸引住,但是对于许多人来说,它们并不是立即显而易见的:
那
object.prop
和object['prop']
是同一件事(所以请您停止使用eval
,谢谢);对象属性始终是字符串(即使是数组);什么for
......in
是(和什么不是)。嗅探财产;什么
undefined
是(以及为什么闻到);为什么看似鲜为人知的in
操作员是有益的并且不同于typeof
/undefined
检查;hasOwnProperty
; 目的delete
。该
Number
数据类型是一个真正的浮动; 使用浮点数与语言无关的困难;避免parseInt
八进制陷阱。嵌套函数作用域;在
var
您要避免意外的全局范围内使用的必要性;范围如何用于闭包;在闭合回路问题。全局变量和
window
属性如何碰撞;全局变量和文档元素如何在IE中不应该冲突,而应该如何冲突?也必须var
在全球范围内使用以避免这种情况。function
语句如何在定义之前的代码之前“ 提升 ”定义;函数语句和函数表达式之间的区别;为什么不应该使用命名函数表达式。构造函数的功能,
prototype
属性和new
运算符的工作方式;利用此方法创建您实际想要的普通类/子类/实例系统的方法;当您可能想使用基于闭包的对象而不是原型时。(对此,大多数JS教程材料绝对是可怕的;花了我很多年才把它弄清楚。)this
通话时如何确定,不受限制;因此,方法传递不像您期望的其他语言那样有效;如何关闭或Function#bind
可以用来解决这个问题。其他ECMAScript第五版功能
indexOf
,forEach
以及上的功能编程方法Array
。如何修复旧版浏览器以确保您可以使用它们;将它们与内联匿名函数表达式一起使用,以获取紧凑,易读的代码。浏览器和用户代码之间的控制流;同步和异步执行;在控件流内部触发的事件(例如焦点)与控件返回时发生的事件和超时;如何调用所谓的同步内置
alert
函数最终会导致潜在的灾难性重入。跨窗口脚本编写如何影响
instanceof
;跨窗口脚本如何影响跨不同文档的控制流;postMessage
希望如何解决这个问题。有关最后两个项目,请参见此答案。
最重要的是,您应该批判性地查看JavaScript,并承认由于历史原因,它是一种不完善的语言(甚至比大多数语言还多),并且避免了最糟糕的麻烦。克罗克福德在这方面的工作绝对值得一读(尽管我并不100%同意他所说的“好零件”)。
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,一个简单的随机对象生成器,用于生成随机的字符串、数字等。在编写自动化测试代码或任何需要随机对象的地方,可以用它来减少单调的工作。
堆栈
队列
基本类型
值类型和引用类型
隐式, 显式, 名义和鸭子类型
函数作用域, 块级作用域和词法作用域
栈(想象成一叠盘子,FILO):
v8一开始会创建全局上下文和全局内存,全局对象一般是window(浏览器)或者global(node环境)也可以通过this引用它(创建阶段,变量都是undefined,变量提升到代码的开头)。开始执行代码的时候,会初始化创建阶段声明的变量(执行阶段)。
函数执行的时候也会创建函数执行上下文(this值是什么,全局的this指向window但是函数的this是由函数怎样被调用决定的,如果是对象调用就指向对象,否则就是全局,arguments对象)和本地内存(如果有变量或者函数的话,并且变量提升)并且将上下文入栈。一开始是main帧, 然后比如是fn1 fn2...。执行完该函数后,函数会出栈(栈帧被销毁)。栈是同步的。
创建阶段上下文主要做这三件事: 决定this 创建词法环境(LexicalEnvironment) 创建变量环境(VariableEnvironment)
了解Crockford的Javascript:The Good Parts中的内容是一个很好的假设,即一个人是一个不错的JS程序员。
您几乎可以知道如何使用类似JQuery的良好库,而仍然不知道Javascript的隐藏部分。
另一个注意事项是各种浏览器上的调试工具。JS程序员应该知道如何在不同的浏览器中调试其代码。
哦! 而且知道JSLint会完全伤害您的感觉!!
相关问题推荐
向一个对象数组里面添加新的属性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...
我觉得getTopWindow() 应该是他自己写的函数 mask 应该是getTopWindow()函数中 return 出的一个什么玩意show() jQuery的显示
如图所示
1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...
使用VS code对JS进行Debug,需要安装一个插件,这个插件是根据你所使用的浏览器来的,不同浏览器对应插件不同,以下是插件对应情况,下载完相应的插件以后还要下载一个live server在浏览器下查看你界面运行效果,记得在到设置里修改下live server的端口号,然...
没有基础,是可以学Java的,在网上也能找到很多免费的视频、学习资料等资源,只不过想要光靠自己摸索学透Java并不容易,最好是找一个比较靠谱的有实训的培训机构。不过,我给你点建议:1.脑子里要有编程思维,2.学习态度要有,3.了解了基本概念后,从图形界面...
假设文本框的id=text1js:document.getElementById(text1).value = 测试;//即可
这两个事件都是在js原生开发时经常会用到的,比如需要对页面dom进行动态处理,这时就需要用到DOMContentLoaded和[removed]事件,大家都知道,就是在dom构建完毕后,才可以对dom元素进行操作,否则会获取不到相应的dom元素,但是DOMContentLoaded和[removed]还...
基本概念CookieCookie 是小甜饼的意思。顾名思义,cookie 确实非常小,它的大小限制为4KB左右。它的主要用途有保存登录信息,比如你登录某个网站市场可以看到记住密码,这通常就是通过在 Cookie 中存入一段辨别用户身份的数据来实现的。localStoragelocalStor...
在vscode 头疼的问题是 用浏览器查看网页!会是以文件夹的方式打开的! 我遇到这个问题 我还重新配置了Apache ! 但是现在可以解决:使用vscode ==================== 打开cmd : 在cmd 控制台中输入 : 1.运行cnpm install live-server...
在进行对象之间的合并的时候,就会使用到extend方法进行合并语法结构:$.extend(true,{},对象1,对象2...)但是这里需要考虑一个问题,如果对象间有相同的属性名,就会涉及到哪一个对象和哪一个对象的值覆盖合并的问题,如果对象中的属性值还是一个对象的话,那...
先说下要实现什么功能,比如:限制图片大小不能超过30K,宽高为121x75上面需求提了,然后我直接把代码给你放出来,可以照着下面代码敲一遍试试就知道怎么限制图片宽高了 $(#picFile4).on(change,function(){ var imgFile = this.files[0]; va...
用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 = [......
基本类型基本类型分为以下六种:string(字符串)boolean(布尔值)number(数字)symbol(符号)null(空值)undefined(未定义)注意:string 、number 、boolean 和 null undefined 这五种类型统称为原始类型(Primitive),表示不能再细分下去的基本类...
实体类中添加时间转换注解(注意时区问题)12345/** * 开始时间 */ @JsonFormat(pattern = yyyy-MM-dd HH:mm:ss, timezone=GMT+8) private Date startTime;
实例中包含加、减、乘、除四种运算,由于先乘和除的优先级别高,所以乘和除将首先被运算,接下来是加和减运算。乘和除优先级相同,所以左边的乘法将被先执行,然后是除法,接下来按从左到右的顺序进行加减运算...