var
原:
console.log(b);
var b = 200;
现:
var b;
console.log(b);
b=200;
let
for(let i = 0;i < 2; i++){
alert(i);
}
alert("循环体之外:" + i);不会输出
let在其作用域下面不存在变量提升(上述例子会报错)
let在其作用域中不能被重复声明(函数作用域和块级作用域)。
(function(){
let test1 = "let";
var test2 = "var"
let test1 = "let changed";//Uncaught SyntaxError: Identifier 'lTest' has already been declared
var test2 = "var changed";
console.log(test1);
console.log(test2);
})();
const
const b = 2;//正确
const b;//Uncaught SyntaxError: Missing initializer in const declaration错误,必须初始化
console.log(b);//有输出值
b = 5;
console.log(b);//Uncaught TypeError: Assignment to constant variable.无法输出
编程范式:声明式编程
01-hellovuejs
{{message}} // 你好啊
{{message}} //{{message}}
//vue.js里面有一个类似于function person(){} new person创建一个实例
//当代码执行到这里的时候,还是原来的,继续向下执行,创建vue实例,对原HTML进行解析和修改
元素js的的做法(编程范式:命令式编程)
//元素js的的做法(编程范式:命令式编程)
//1.创建div元素,设置id属性
//2.定义一个变量叫message
//3.将message变量放在前面的div元素中
//4.修改message的数据:今天天气不错!
//5.将修改后的数据再次替换到div元素
遍历对象会报错
var obj = {
'name': 'Jim Green',
'age': 12
}
for(let key of obj) {
console.log('for of obj', key)
}
// Uncaught TypeError: obj is not iterable
for...in遍历键名
for(let key in obj) {
console.log('for in key', key)
}
/*
for in key name
for in key age
*/
可以使用 Object.keys(obj) 方法将对象的键名生成一个数组,然后遍历这个数组
for(let key of Object.keys(obj)) {
console.log('key', key)
}
/*
key name
key age
*/
let arr = [1, 2, 3]
arr.set = 'world' // 手动添加的键
Array.prototype.name = 'hello' // 原型链上的键
for(let item in arr) {
console.log('item', item)
}
/*
item 0
item 1
item 2
item set
item name
*/
for(let value of arr) {
console.log('value', value)
}
/*
value 1
value 2
value 3
*/
let arr = [1, 2, 3, 5, 9]
arr.forEach(item => {
if(item % 2 === 0) {
return
}
console.log('item', item)
})
/*
item 1
item 3
item 5
item 9
*/
for…of 循环可以与break、continue 和 return 配合使用,跳出循环
for(let item of arr) {
if(item % 2 === 0) {
break
}
console.log('item', item)
}
// item 1
Title
- {{item}}
第一版
Title
当前技术:{{counter}}
第二版
Title
当前技术:{{counter}}
//写的太多了,写成函数
什么是MVVM
MVVM是Model-View-ViewModel的缩写。MVVM主要是一种设计思想。
View层是视图层,也就是用户界面。前端主要由HTML和CSS来构建,通常就是DOM层
Model层 是指数据层,数据可能是我们固定的死数据,更多的是来自我们服务器,从网络上请求下来的数据,泛指后端进行的各种业务逻辑处理和数据操控,对于前端来说就是后端的提供的API接口;
ViewModel层是视图数据层,是沟通前两个的桥梁,一个同步View和Model的对象。
在MVVM架构下,View和Model之间并没有直接的联系,而是通过ViewModel进行交互,ViewModel通过双向数据绑定把View层和Model层连接了起来,View和Model之间的同步工作是自动的。
Data Bindings:数据绑定,把MOdel中的数据改变返回到view上
DOM listeners:DOM监听,界面上发生一些操作,一些事件时,再把这些操作返回到JavaScript 对象中,在需要的情况下改变对应的Data
options
el:
类型:string|HTMLElement
作用;决定之后vue实例会管理哪一个DOM
data:
如果是Vue实例是一个对象,组件是一个函数
类型:Object|Function
作用:Vue实例对应数据对象
methods://对象
类型:{[key:string]:Function}
作用:定义一些属于Vue的一些方法,可以在其他地方调用,也可以在指令中使用
Javascript定义类(class)的三种方法
一,构造函数法
function Cat() {
this.name = "大毛";
}
var cat1 = new Cat();
alert(cat1.name); // 大毛
Cat.prototype.makeSound = function(){
alert("喵喵喵");
}
二、Object.create()法
var Cat = {
name: "大毛",
makeSound: function(){ alert("喵喵喵");
}
};
var cat1 = Object.create(Cat);
alert(cat1.name); // 大毛
cat1.makeSound(); // 喵喵喵
三、极简主义法
var Cat = {
createNew: function(){
var cat = {};
cat.name = "大毛";
cat.makeSound = function(){ alert("喵喵喵"); };
return cat;
}
};
var cat1 = Cat.createNew();
cat1.makeSound(); // 喵喵喵
开发中,什么时候称之为方法,什么时候称之为函数
1.方法(method)
const obj = {
counter = 0
}
const app = new Vue({
el:'#app',
data: obj,
methods:{
add: function(){
this.counter++
},
sub: function(){
this.counter--
}
}
})
2.函数
3.js中既有方法又有函数,java中只有方法的概念
生命周期
在github上下载vue时,下载后面加了tag的,debug开发版本,release发布版本
设置->live ->vue ->define->html
{{message}}
{{message}}
01-Mustache
{{message}}
{{message}},小可爱
{{firstname + lastname}}
{{firstname + ' ' +lastname}}
{{firstname}} {{lastname}}
{{counter * 2}}
该指令后面不需要跟任何表达式,比如前面的v-for是需要跟表达式的
该指令表示元素和组件只渲染一次,不会随着数据的改变而改变
02-v-once
{{message}}
{{message}}
url:'百度一下'
03-v-html
{{url}}
,llll
使用这个写法的话前面的内容会将后面的内容覆盖
04-v-text
{{message}},llll
,llll
05-v-pre
{{message}}
{{message}}
//在vue解析之前,div中有一个属性叫v-cloak
//在vue解析之后,div中没有一个属性叫v-cloak
06-cloak
{{message}}
:
01-v-bind
含义:class后面跟的是一个对象
class后面跟的是一个数组
对象语法
{{massage}}
02-bind动态绑定class对象语法
{{message}}
//后面的class不会覆盖掉前面的class
解释上面用法四
02-bind动态绑定class对象语法
//后面的class不会覆盖掉前面的class
{{message}}
Title
{{meaasge}}
{{message}}
//这两种写法是一个意思
Title
-
{{index}}.{{m}}
对象语法
{{message}}
fontsize值写死了,不如使用stylecss
05-v-bind绑定style
{{message}}
05-v-bind绑定style
{{message}}
{{message}}
数组语法
{{message}}
Title
{{message}}
{{firstName + ' ' + lastname}}
{{firstName}} {{lastname}}
{{getfullname()}}
{{fullName}}
{{firstName + ' ' + lastname}}
{{firstName}} {{lastname}}
{{getfullname()}}
{{fullName}}
Title
总价格:{{totalPrice}}
简写:
computed:{
fullname:function () {
return this.firstName + ' ' + this.lastname
}
}
实质:
computed:{
fullname:{
set:function () {
},
get:function () {
return this.firstName + ' ' + this.lastname
}
}
set方法完整格式
set:function (newvalue) {
console.log('....',newvalue);
const names = newvalue.split(' ') ;
this.firstName = names[0];
this.lastname = names[1];
},
所有代码:
Title
{{fullname}}
计算属性会进行缓存,如果多次使用,计算属性只会调用一次
Title
{{fullname}}
{{fullname}}
如图,getfullname执行了两次
fullname执行了一次
菜鸟教程(runoob.com)
该实例使用 addEventListener() 方法来向按钮添加点击事件。
//添加点击事件内部写入Hello World
1.变量作用域 :变量在什么范围内是可用
{
var name = 'why';
console.log(name);
}
console.log(name);//可以打印
2.没有块级作用域引起的问题:if的块级
var func;
if(true){
var name = 'why';
func = function () {
console.log(name);
}
}
name = 'jhgi';
func();
//此时name的值不是我们想要的why
var name = 'why';
function abc(bbb) {
console.log(bbb);
}
abc('iyhuh');
name = 'secds';
//在这里前面后面随便改,都和函数没有影响
3.没有块级作用域引起的问题:for的块级
错误:
const btns = document.getElementsByTagName('button');
for(var i =0;i
注意点
一些变量或者常量,将变量的名称作为key,值作为value
typescript(Microsoft)–简称ts,有类型检测,TypeScript 是一种给 JavaScript 添加特性的语言扩展,TypeScript 是 JavaScript 的一个超集(包括),支持 ECMAScript 6 标准,而JavaScript没有
flow(Facebook)也有,Flow 是 Facebook 出品的一个用于 JavaScript 代码的静态类型检查工具。用于找出 JavaScript 代码中的类型错误。Flow 采用 OCaml 语言开发。
react(Facebook在维护)editorconfig规定书写格式:缩进两个,React 是一个用于构建用户界面的 JAVASCRIPT 库。
angular(这个框架是)—》Google,大部分用的是typescript,缩进两个空格AngularJS 是一个 JavaScript 框架。它是一个以 JavaScript 编写的库。
对象字面量
//
//
//{}对象字面量
//我们以前写对象字面量
const obj = {
name : 'why',
age : 18,
run:function () {
console.log('在');
},
eat:function () {
console.log('干嘛');
}
}
1.属性的增强写法
//1.属性的增强写法
const name = 'why';
const age = 18;
const height = 1.88
//ES5的写法
const obj = {
name : name,
age : age,
height : height
}
console.log(obj);
//ES6的写法
const obj = {
name,
age,
height,
}
console.log(obj);
2.函数的增强写法
//ES5的写法
const obj = {
run : function () {
},
eat : function () {
}
}
//ES6的写法
const obj = {
fun(){
},
eat(){
}
}
v-on:click可以写成@click
通过下面案例监听按钮的点击事件,看看v-on的使用
Title
点击次数:{{counter}}
1.事件调用的方法没有参数
2.在事件定义时,写函数时省略了小括号,但是方法本身是需要一个参数的
//正常
会把浏览器生成的event对象传过来 在事件定义时,写方法时省略了小括号,但是方法本身是需要一个参数的,这个时候,vue会默认将浏览器的event事件对象作为参数传入到方法
某些情况你需要拿到这个event对象,你就可以这样写,下面写一个event参数,上面不带括号
3. 方法定义时,我们需要event对象,同时又需要其他参数
都不写,会把event传给第一个参数,第二个event变成undefined
后一个参数写成event会报错,为undefined,这里是把event当成一个变量,就会在下面找,在data里面定义一个变量,就可以找到
如何手动的拿到浏览器参数event对象:$event
传一个123,‘abc’,当成基本内型传进去了,如果写成abc,当成一个变量,又会在下面找
阻止冒泡
//加了之后,只打印btnclick,不打印divclick
2. .prevent修饰符的使用
3.监听某个键盘的键帽
keyup:键盘的点击事件:一直按着键盘不会有打印,松开才会有
语法糖
监听enter
4.once修饰符的使用,只执行一次回调
其他代码:
1.v-if的使用
Title
{{message}}