在ES5的时候,我们经常使用seajs
,requirejs
等库来实现模块化开发。后面又出现了vuejs
,reactjs
实现组件化开发。
但对于PC端的WEB页面来说,因为要考虑seo
的因素,vue
和react
个人觉得就不是很适用了
ES6引入了import
和export
,虽然并不是所有浏览器都支持,但新版的chrome
和firefox
运行import
和export
已经不是问题了。使用es6甚至更新的JS语法来进行浏览器JS开发,应该也是以后的一个趋势了
看一下其他浏览器的兼容
firefox
不用特意开启,默认就支持。chrome
需要手动开启一下,输入chrome://flags/
,搜索Experimental JavaScript
,把Experimental JavaScript
设置为Enabled
,如下图:
demo目录结构
.
|-- demo.html
|-- js
| `-- demo.js
|-- module
| `-- a.js
`-- package.json
demo.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="IE=7;IE=9" http-equiv="X-UA-Compatible">
<title>demo</title>
<meta content="" name="keywords">
<meta content="" name="description">
</head>
<body>
<div>es6模块化加载</div>
<script type="module" src="./js/demo.js"></script>
</body>
</html>
js/demo.js
import a from '../module/a.js';
a();
module/a.js
export default function(){
console.log('demo')
}
运行结果,如下可见,浏览器进行了模块化加载并执行了JS
使用es6进行模块化开发,虽然在chrome
上可以跑,但如果我们要让发布的代码兼容低版本的浏览器,还是需要把它转成es5的。
多页面,我习惯使用gulp
进行工程化打包,这里引入了rollup插件来打包es6模块
// 其他依赖包...
const rollup = require('gulp-better-rollup');
const rollupBabel = require('rollup-plugin-babel');
gulp.task('JS_build', function() {
return gulp
.src(
['./**/*.js']
)
.pipe(
rollup(
{
plugins: [rollupBabel()]
},
{
format: 'umd'
}
)
)
.pipe(gulp.dest('./dist'))
});
// .babelrc
{
"presets": [
[
"env",
{
"modules": false
}
]
],
"plugins": ["external-helpers"] //需要安装npm install --save-dev babel-plugin-external-helpers
}
使用es6模块化加载,必须启用一个localhost
服务,直接打开文件会加载失败
script标签上必须使用type=module
<script type="module" src="./js/demo.js"></script>
表格如果字段多,有横向滚动条是不是不方便?可拖拽的滚动是不是就方便了?
使用create-vue创建vue3项目,vite,vue3
相对VUE2 ,VUE3做了哪些优化和改进呢?
Beyond Compare4试用30天到期了,怎么操作?买吗?去吧
正则如果匹配键盘上的所有特殊字符?中文的特殊字符又如何匹配?
如果下载正版的,不带流氓软件的系统IOS文件镜像
vue项目,不使用window.location.reload(),如何刷新当前页面?
使用moment.js对时间进行加减操作,使得fomrat输出对应的格式,取0点的时间缀和24点的时间缀
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
ant.design 4.x获取form表单的方式
ant.design v5 and 中如何在class中使用umijs的useModel调用initialState
vue2.0 v-html指令有潜在的xss风险,如何解决?
vue项目通过axios怎么下载二进制文件或图片?
ant.design UI框架 同时使用v-model或value属性时, placeholder不显示
Problems loading reference 'http://json.schemastore.org/package': Unable to load schema from 'http://json.schemastore.org/package': Bad request. The request cannot be fulfilled due to bad syntax. Invalid header received from client. .
如何在VUE项目中添加stylelint,检查css,scss,less的语法问题,保证团队代码的规范统一
react之ref提示:Using string literals in ref attributes is deprecated,不能使用字符串,怎么处理?
react不能在 render里设置state,也不能在componentWillReceiveProps里设置state,会导致性能问题。如果要通过属性改变state,怎么做呢?可以利用getDerivedStateFromProps生命周期函数
JS生成树形菜单
利用nginx服务器推送关键静态资源,加快网站打开速度
VUE全局函数
定义了服务端渲染的属性名称常量SSR_ATTR,定义了一些资产类型常量ASSET_TYPES,定义了生命周期相关钩子函数的函数名称
if(a==1 && a==2 && a==3){ console.log('hello"); }
MVC是一种设计模式,它将应用划分为3个部分:数据(模型)、展示层(视图)和用户交互层。结合一下下图,更能理解三者之间的关系。
所谓的垃圾回收其实是内存释放的过程,我们用JS定义变量、对象时,系统会为它们分配内存,如果这一块的内存得不到释放,那么内存会耗尽(这就是所谓的内存泄漏)
Fetch 是 web异步通信的未来. 从chrome42, Firefox39, Opera29, EdgeHTML14(并非Edge版本)起, fetch就已经被支持了. 其中chrome42~45版本, fetch对中文支持有问题, 建议从chrome46起使用fetch.
`super`关键字用于访问和调用一个对象的父对象上的函数。 `super.prop`和`super[expr]`表达式在类和对象字面量任何方法定义中都是有效的。 在构造函数中使用时,`super`关键字将单独出现,并且必须在使用`this`关键字之前使用。`super`关键字也可以用来调用父对象上的函数。
对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”
在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 &amp;amp;quot;object&amp;amp;quot;。ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。
JS数组去重的各种方法~
使用iviewui-admin框架构建管理系统时,遇到的各类问题
使用es6的exports和import 进行模块化开发
vue项目中动态图片路径拼接
vue下filter方法的调用
对于 HTTP头Cache-Control,我们经常使用,也非常&amp;quot;熟悉&amp;quot;,然后经常会有问题,为什么我使用了&amp;quot;no-cache&amp;quot;,然后为什么还有缓存? 看这个文章你就知道为什么了。
在之前,我们要判断一个元素是否出现在视窗内,需要使用`scroll`或`setInterval`来不断计算元素的位置,这样非常损耗性能,Chrome在2016年的时候推出了IntersectionObserver APi,现在看看它是做什么的
21个vue顶级UI框架: Vuetify,Quasar,Vue Material,Keen-UI,Buefy,Bootstrap Vue,Muse-UI,AT-UI,Vux,iView,Uiv,Vuikit,Onsen UI+Vue,Semantic UI+Vue,Fish-UI,Mint UI,Framework7 Vue,Cube UI,Vueblu,Ant Design Vue
轻量高效的开源JavaScript插件和库
格式化input输入~
&amp;amp;quot;.vue&amp;amp;quot;文件是如何解析成js对象的~
立个flag,看过年这段时间能不能把vue的源码读完?多年前看过jQuery的部分源码,如果想要更深入的了解vue,还是得从源码开始
vue源码阅读,慢慢学习
vue的生命周期函数
Next.js 是一个轻量级的 React 服务端渲染应用框架。
使用原生window.atob和btoa进行base64编码解码
NodeJieba是&amp;amp;amp;quot;结巴&amp;amp;amp;quot;中文分词的 Node.js 版本实现, 由CppJieba提供底层分词算法实现, 是兼具高性能和易用性两者的 Node.js 中文分词组件。
通过箭头函数或bind方式,对绑定事件传参
vue组件的数据data为什么一定要是函数 ?
回顾一下NaN,isNaN,Number.isNaN
React Hot Loader是一个插件,允许React组件在不丢失状态的情况下进行实时重新加载。它适用于Webpack和其他支持热模块替换(HMR)和Babel插件的捆绑器
如果你查看目前任何主流的项目中的`devDependencies`,会发现前些年的不计其数的插件诞生。我们归纳一下有:javascript转译、代码压缩、css预处理器、elint、pretiier,等。有很多js模块我们不会在生产环境用到,但是它们在我们的开发过程中充当着重要的角色。所有的上述工具,不管怎样,都建立在了AST这个巨人的肩膀上
在第一部分中我们了解了许多基础知识,结束了语法的学习,我们可以进入下一个更有趣的部分:使用静态类型的优势和劣势
作为一个JavaScript开发者,你可以编写一整天编写也不会遇到任何静态类型检查得问题。那么为什么要自找麻烦得去学习它呢? 然而学习静态类型并不仅仅是一个思维拓展的训练。如果你愿意花点时间来学习一些静态类型的优势、劣势以及使用的案例,那将会极大的帮助你进行编码。 怎么样,有意思吧?要是你感兴趣的话,那接下来四个部分将会向你详细解释
Warning: `getFieldDecorator` will override `value`, so please don't set `value` directly and use `setFieldsValue` to set it.
Mint-ui this.$messagebox点取消时,报错:Uncaught (in promise) cancel
vue-validate使用
这就是个vue的坑。。。
vue如何监听enter事件?
vue使用axios进行form表单提交
这一节,我们会讨论词法环境的细节,它是在一些编程语言中用于管理静态作用域的一种机制。为了确保能充分理解这一主题,我们会简要讨论下其对立面:动态作用域(并没有直接用于 ECMAScript)。我们会看到环境是如何管理代码中的词法嵌套结构,以及为闭包提供全面支持。
vue中如何改变title标题
如果在vue2.0中使用NProgress进度条
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。也是vue2.0官方推荐的,同时不再对vue-resource(vue1.0使用)进行更新和维护
React 的核心思想是:封装组件。 各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件。 基于这种方式的一个直观感受就是我们不再需要不厌其烦地来回查找某个 DOM 元素,然后操作 DOM 去更改 UI
这一章专门讨论了ECMA-262-5 规范的新概念之一 — 属性特性及其处理机制 — 属性描述符。 当我们说“一个对象有一些属性”的时候,通常指的是属性名和属性值之间的关联关系。但是,正如在ES3系列文章中分析的那样,一个属性不仅仅是一个字符串名,它还包括一系列特性—比如我们在ES3系列文章中已经讨论过的{ReadOnly},{DontEnum}等。因此从这个观点来看,一个属性本身就是一个对象
分析Vue.js源码
npm run dev模式下,webpack4+vue2项目下,类似'/user/login'二级路由,刷新时静态资源路径不对,静态资源返回404
[Vue warn]: Error in render: "TypeError: Cannot read property 'matched' of undefined"
did you register the component correctly? For recursive components, make sure to provide the "name" option
vue.js如何查看注册了哪些组件,获取组件名称
本教程全面介绍 JavaScript 核心语法,从最简单的讲起,循序渐进、由浅入深,力求清晰易懂。所有章节都带有大量的代码实例,便于理解和模仿,可以用到实际项目中,即学即用。
《ECMAScript 6 入门》是一本开源的 JavaScript 语言教程,全面介绍 ECMAScript 6 新引入的语法特性。
vue底层的Virtual DOM就是基于snabbdom修改的
这一章的第二部分是关于EMCAScript中的面向对象编程。在第一部分中我们讨论了OOP的基本理论并勾画出和ECMAScript的相似之处。在阅读第二部分之前,如果有必要,我还是建议首先阅读这一章的第一部分.基本理论,因为后面将会用到其中的一些术语。
这一章我们讨论ECMAScript中面向对象编程(object-oriented programming)的几个主要方面。由于这一主题已经在许多文章中谈论过,本章并不打算“老调重弹”,而是试图更多地着眼于这些过程内在的理论方面。尤其是,我们将研究对象创建的算法,看看对象间的关系(包括最基本的关系——继承)是如何实现的,并且给出一些讨论中将用到的准确定义(我希望这样能够打消一些术语和思路上的疑惑以及一些关于Javascript文章中OOP部分的常见的混淆)。
在这一章中我们来谈谈Javascript中被讨论最多的话题之一——关于闭包(closures)。事实上这个主题并不是新鲜的。然而我们在这里将试着更多从理论的角度去分析和理解它,然后我们还会看一下ECMAScript内关于闭包的内容。
在这章里我们讨论ECMAScript中的一个基本对象——函数。我们将会看到不同类型的函数如何影响一个上下文中的变量对象,以及这些函数的作用域链中都包含什么。我们将会回答像下面这样经常被问到的问题:“下面这两种创建函数的方式有什么区别吗(如果有的话,区别是什么呢)?”
正如我们从第二章.变量对象中了解到的,执行上下文的数据(变量,函数声明,函数形参)以变量对象的属性的方式储存。
许多程序员习惯于认为在编程语言中,this关键字是与面向对象编程紧密相关的,而且引用的是由构造式最新创建的对象。在ECMAScript中,这个概念也被实现了,然而我们将看到,在这里它不仅仅指向已创建的对象。
在程序中我们总是声明变量和函数然后用它们来搭建我们的系统。但是解释器(interpreter)是在哪里和以什么方式来找到我们的数据(函数,变量)的呢?
第1章:在这一章里,我们将会讨论ECMAScript中的执行上下文(execution context)以及与它们相关的可执行代码(executable code)的类型。
检测这种缩放有很种方法,QQ空间都通过flash来检测浏览器是否处于缩放。这里提供javascript的方法来检测浏览器的缩放。
当你的项目中的时间需要考虑时区,夏令时时,下面判断夏令时的方法就很有用了!
在以前的编码过程中,对for...in遍历对象的循环的,一直以为是没有顺序的。直到遇到有对象有的key值为纯数字时,发现现代浏览器对for...in循环是有顺序之分的。
有时候我们需要把网页的右键菜单禁用,然后启用自己模似的右键菜单。或者我们为了避免用户习惯性的使用F5刷新或使用Ctrl+r键刷新导致表单数据的丢失,我们还需要把F5键和ctrl+r键都屏蔽掉。甚至根据需要还可能会屏蔽退格键(Backspace)和退出键(Esc)。
preventDefault它是事件对象(Event)的一个方法,作用是取消一个目标元素的默认行为。既然是说默认行为,当然是元素必须有默认行为才能被取消,如果元素本身就没有默认行为,调用当然就无效了。什么元素有默认行为呢?如链接<a>,提交按钮<input type="submit">等。当Event 对象的 cancelable为false时,表示没有默认行为,这时即使有默认行为,调用preventDefault也是不会起作用的
通过JS检测网络是否OK,最简单粗暴的方式就是加载网络资源,JS文件或者图片文件...
什么是类数组?相信我们对function方法的arguments很熟悉,arguments就像一个数组,但instanceof Array检测会返回false,可以称为“类数组”。
利用iframe实现跨域
项目使用了setMonth来设置时间,发现了一个问题,2月份设置下去,显示出来变成3月份了。
jQuery是现在最流行的js库,一般情况下我们都会放心的使用它,不用考虑其内存泄漏的问题。 最近的项目是基于MVC模式的管理系统,期间要采用ajax不断轮询服务器,以获得最新的数据,这时候使用jQuery的时候就要注意了,一不小心俺们最可爱的IE内存就up up up了~~
除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。
IE提示expected 错误,如果语法没问题,不防检查下是不是文件编码问题,改为utf-8试试
javascript原始数据类型相互转换示例,如字符串、数字、布尔类型的相互转换
arguments是调用对象的一个属性,它与形参及局部变量是一样的,它实际上是调用了一个Arguments对象,Arguments对象与数组相似,但它又不是数组,因为它不具备数组的一些常用方法,如push,sort,shift等等。Arguments对象有两个属性:
利用javascript开发WEB功能时,代码量小还OK,如果代码非常庞大,这就不可避免的出现一些未知的错误。如果web已经上线,这时却出现了js脚本错误,这对WEB的用户体验是致使的,因为一但出现js脚本错误,网页将停止加载,从而不能正常显示出页面,而失去用户。
一般情况下,判断javasceript数据类型,使用typeof 或 instanceof 就够了,但偶觉得用起来还是别别扭扭的。这里介绍一个完美的方法,我们可以轻松的判断数组,对象(这里对象暂且指{}),函数(function),布尔(Boolean),null,undefined,number,时间对象(date),正则表达式(RegExp)。
目前完成的一个基于MVC模式的管理系统,综合考虑后,选择了doT.js,这篇文章主要也是介绍下它的优势及使用方法。
移动光标到文字末尾,如果使用<input><textarea>时,需要把光标定位在文字的后面