Vue-es6语法

摘要:
瓦拉;{vara=20}console.log(a);*未定义*30**/<vara=[];对于(varia=0;i<i++){a[i]=function(){console.log(i);20*因为循环完成后,i==20**/<常量无法修改{constpi=3.14;console.log(desc);functionadd(a;7**/&lt:或<

一、Vue课程介绍

二、es6中的let和const声明变量

三、es6中的模板字符串

四、es6的箭头函数(函数的书写)

五、对象的单体模式

六、es6中的class的使用

七、前端三大框架比较

八、前端框架与库的区别

九、nodejs中npm的使用


一、Vue课程介绍

1)上来先不要搞Vue,因为前端知识太多,html+css+js(ECMAScript5)+jquery+bootstrap+响应式
2)ECMAScript6的语法(目的:主要在看别人的代码,不要看不懂里面的api)主流的浏览器有部分的es6语法不识别,
3)服务器语言nodejs express框架 包管理器 npm(要会使用npm) 一个js文件就是一个包(模块) jquery.min.js
就不用<script>了,而是用npm下载,跟Python的pip3一样
4)Vue的基础语法
5)Vue的高级语法
6)Vue提供的脚手架的东西:vue-cli webpack(前端中的工具)
7)设计模式 如何在实现单页面应用 前端中的路由...

复习:1.js的DOM操作:
节点的操作,dom.appendChild dom.removeChild
属性的操作dom.setAttribute dom.getAttribute,
样式属性的操作dom.style.xx,
值的操作dom.value dom.innerText dom.innerHtml
2.事件 事件对象回顾起来 阻止冒泡 阻止默认事件

二、es6中的let和const声明变量

主流的浏览器有部分的es6语法不识别,通过babel将es6转换成浏览器识别的es5的语法
1.声明变量 let和const声明变量

//es5中声明变量使用的是var,带来两个问题,变量提升和作用域的问题
先看一段代码:

<script>
console.log(a);
var a = 10;
console.log(a);

/*
* 打印结果:
* undefined
* 10
* */
</script>

本来打印第一句console.log(a)应该报“a未被定义”的错误,为什么没有报错呢?

因为上面的代码相当于:

<script>
var a;
console.log(a);
a = 10;
console.log(a);
</script>

此时,var a=10 这种书写方式就导致了变量提升。
如果这样写:

<script>
console.log(a);
{ var a = 20 }
console.log(a);
/*
* 打印结果:
* undefined
* 20
* */
</script>

大括号里的a也会进行变量提升,变为全局变量,大括号的作用域就不起作用了。
再看代码:

<script>
console.log(a);
{
var a = 20;
var a = 30;
}
console.log(a);
/*
* 打印结果:
* undefined
* 30
* */
</script>

如果在大括号里不小心使用了相同的变量,会进行覆盖(本来应该报错“a已被定义”)
再看下面代码:

<script>
var a=[];
for(var i=0;i<20;i++){
a[i] = function(){
console.log(i);
}
}
a[5]();
/*
* 打印结果:20
* 因为循环完后i==20
* */
</script>

如果把 "var i=0" 换成 "let i=0"  打印结果a[5]()==5

所以:使用let声明变量的好处
1)属于局部作用域
2)没有覆盖现象

而const声明的是常量
const pi = 3.1415926
pi = 20 //报错,常量不能被修改
{ const pi = 3.14; } console.log(pi); //报错,“pi未定义”
const声明的常量属于局部作用域

三、es6中的模板字符串

看下面的代码,es5中的字符串拼接:

<script>
let name='alex';
let age=29;
let desc = name+'今年'+age+'了,鸡汤很多';
console.log(desc);
/*
* 打印结果:
* alex今年29了,鸡汤很多
* */
</script>

而在es6中可以使用反引号 ${变量} 进行拼接:

<script>
let name='alex';
let age=29;
let desc = `${name}今年${age}了,鸡汤非常多`;
console.log(desc);
/*
* 打印结果:
* alex今年29了,鸡汤非常多
* */
</script>

四、es6的箭头函数(函数的书写)

在es5中的函数书写方式:

<script>
function add(a, b) {
return a+b;
}
alert(add(3,4));
/*
* 输出:7
* */
</script>

或者

<script>
var add = function (a,b){
return a+b;
};
alert(add(3,4));
/*
* 输出:7
* */
</script>

在es6中:

<script>
var add = (a, b) => {
return a + b;
};
alert(add(3, 7));
/*
* 输出:10
* */
</script>

再看一段代码:

<script>
var person = {
name: "alex",
age: "20",
fav: function () {
console.log("喜欢AV");
console.log(this); //this表示当前对象person
}
};
person.fav();
/*
* 输出:
* 喜欢AV
* {name: "alex", age: "20", fav: ƒ}
* */
</script>

如果fav函数的定义方式使用es6的方式:

<script>
var person = {
name: "alex",
age: "20",
fav: () => {
console.log("喜欢AV");
console.log(this); //this指向发生改变,指向了定义person的父级对象window
}
};
person.fav();
/*
* 输出:
* 喜欢AV
* Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
* */
</script>

以上两种方式书写,this指向不同。
再看一段代码:

<script>
var person = {
name: "alex",
age: "20",
fav: function (content) { //content表示形参
console.log("喜欢AV");
console.log(this);
console.log(arguments[0]) //arguments表示实参
}
};
person.fav('哈哈哈', '呵呵呵');
/*
* 输出:
* 喜欢AV
* {name: "alex", age: "20", fav: ƒ}
* 哈哈哈
* */
</script>

如果把上面代码改成箭头函数:

<script>
var person = {
name: "alex",
age: "20",
fav: (content) => {
console.log("喜欢AV");
console.log(this);
console.log(arguments) //报错;"arguments未定义"
}
};
person.fav('哈哈哈', '呵呵呵');
/*
* 输出:
* 喜欢AV
* Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
* Uncaught ReferenceError: arguments is not defined
* */
</script>

总结:
function(){} 等价于 ()=>{}
箭头函数的使用带来的问题:
1)使用箭头函数,this的指向发生改变
2)使用箭头函数,arguments不能使用

五、对象的单体模式

es5中字面量方式创建对象

<script>
var person = {
name: "alex",
age: "20",
fav: function () {
console.log(this);
console.log(arguments[0])
}
};
person.fav('哈哈哈');
/*
* 输出:
* {name: "alex", age: "20", fav: ƒ}
* 哈哈哈
* */
</script>

es6中对象的单体模式

<script>
var person = {
name: "alex",
age: "20",
fav() {
console.log(this);
console.log(arguments[0]);
}
};
person.fav('哈哈哈');
/*
* 输出:
* {name: "alex", age: "20", fav: ƒ}
* 哈哈哈
* */
</script>

"fav(){}" 等价于"fav: function(){}"等价于"var fav=function(){}"
"fav(){}" 就是定义一个名为fav的函数
总结:
使用对象的单体模式,对象单体模式就是一个函数
可以解决箭头函数this的指向和arguments不能使用的问题

六、es6中的class的使用

讲对象的单体模式就是为了创建这个类

<script>
// es5中:
// 构造函数模式创建对象,使用new关键字创建对象
// 构造函数与普通函数的区别是首字母大写
// (希望创建的对象通过instanceof方法得到的是具体的对象而不是抽象类Object)
function Person(name, age) {
this.name = name;
this.age = age;
this.alertName = function () {
alert(this.name);
}
}
var person1 = new Person('alex', 20);
person1.alertName();
/*
* 输出:alex
* */
</script>

----

<script>
//es6中创建对象的方式 使用class
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
showName() {
alert(this.name)
}
}
var p2 = new Person('张三', 20);
p2.showName();

/*
* 输出:张三
* */
</script>

补充:global对象
ES5的顶层对象,本身也是一个问题。因为它在各种实现里面是不统一的。
--浏览器里面,顶层对象是window,但Node和Web Worker没有window
--浏览器和Web Worker里面,self也指向顶层对象,但是Node没有self
--Node里面,顶层对象是global,但其他环境都不支持

七、前端三大框架比较

Vue Angular React

Vue官方文档:https://cn.vuejs.org/

八、前端框架与库的区别

功能上的不同:
jQuery库:包含DOM(操作DOM)+请求,就是一块功能。
art-template库:模板引擎渲染,高性能的渲染DOM
框架:大而全的概念,简易的DOM体验+请求处理+模板引擎
在KFC的世界里,库就是一个小套餐,框架就是全家桶


代码上的不同:
一般使用库的代码,是调用某个函数或者直接使用抛出来的对象,我们自己处理库中的代码。
一般使用框架,其框架本身提供的好的成套的工具帮我们运行我们编写好的代码。


框架的使用:
1.初始化自身的一些行为
2.执行你所编写的代码
3.释放一些资源

九、nodejs中npm的使用

1.到官网https://nodejs.org/en/下载安装nodejs(傻瓜式安装)
2.命令行输入:node -v 和 npm -v 查看版本 nodejs的作用是创造JavaScript代码的运行环境,让JavaScript跟Python一样成为服务器语言
3.初始化,先进入项目的目录,
执行`npm init` 或  `npm init --yes` 
执行`npm install vue --save` //下载Vue到当前目录   // 或指定版本`npm install vue@1.0.1 --save`

{
"name": "vue_lesson", # 项目的目录
"version": "1.0.0", # 项目的版本号
"description": "", # 项目的描述
"main": "index.js", # 项目的入口文件
"scripts": { # 项目的脚本
"test": "echo "Error: no test specified" && exit 1"
},
"author": "", # 作者
"license": "ISC", # 认证证书
"dependencies": { # 当前项目的依赖
"vue": "^2.6.10"
}
}

免责声明:文章转载自《Vue-es6语法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Bootstrap Table 中文文档(完整翻译版)R语言绘图如何把图例绘制在外边及调整图例位置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QT显示如何减轻闪屏(双缓冲和NoErase)

很多同志在些QT 程序后会遇见闪屏的问题, 有时速度非常快,但毕竟影响了显示效果,如何做到减轻屏幕抖动或闪屏呢?我曾试过如下的办法:1.使用双缓冲。 比如我们在一个Widget里面绘多个图的话, 先创建一个QPixmap对象 然后用QPainter在这个QPixmap对象上绘图,最用后BitBlt 将数据copy到active painterDev上就可以...

【UEFI】---BIOS中UserPassword的重复校验总结

  UEFI作为目前较为流行的一套X86架构初始化的标准框架,已受到业界内的广泛认可。而其中很多编程所采用的思想确实值得学习。今天总结下UEFI的框架下修改代码的一点小经验,仅供菜鸟参考。 先列干货,具体的小结后续补充:   1. 明确你要的某个功能的实现逻辑,都需要在哪个位置添加代码。     (很重要,这决定着你的方案是否可行重要前提,一旦此步骤错误,...

(转载)HTTP状态码

转载请见https://blog.csdn.net/Lkeven/article/details/52775296 HTTP Status Code 常见的状态码: HTTP: Status 200 – 服务器成功返回网页 HTTP: Status 404 – 请求的网页不存在 HTTP: Status 503 – 服务不可用 详解 说明: HTTP:...

【spring源码系列】之【环境搭建】

1. gradle安装 1.1 下载gradle gradle官网下载对应的版本,笔者用的6.0.1,下载地址如下https://gradle.org/releases/,找到6.0.1,选择complete连接下载,如下图 1.2 配置环境变量 解压gradle到指定目录,配置环境变量GRADLE_HOME、Path,与JDK类似,如下图 在命令行输入g...

Delphi启动过程追踪

第一步: _InitExe windows调用Exe的入口 _StartExe InitUnits 第二步: InitControls的initialization部分 TApplication.Create AllocateHWnd AllocateHWnd MakeObjectInstance StdWndProc Instance^.FMethod...

SpringMVC源码阅读HandlerMapping初始化-AbstractHandlerMapping(五)

接口 public interface HandlerMapping { /** * 根据requst获得 对应的Handler * @param var1 * @return * @throws Exception */ Handl...