前端学习WebStretch
xiaoyuFetch请求Json文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <script> fetch('./carList.json') .then(response => {
if(response.ok){ return response.json() } else{ console.log('error'); }
}) .then(data => { console.log(data); })
.catch(error => { console.log('error'); }) </script>
|
Ajax请求Json文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <script> const ajax = new XMLHttpRequest();
ajax.open('GET', 'test.json');
ajax.onload = function(){ if(ajax.status == 200){ const data = JSON.parse(ajax.responseText) console.log(data); } }
ajax.onerror = function(){ console.log('error'); }
ajax.send(); </script>
|
var,let,const
在 JavaScript 中,var、let 和 const 是用来声明变量的三个关键字。随着 ES6(ECMAScript 2015)的引入,let 和 const 成为了现代开发的标准。
它们的主要区别体现在作用域、变量提升以及是否允许重新赋值上。为了方便对比,这里整理了一张核心区别总结表:
| 特性 |
var |
let |
const |
| 作用域 |
函数 / 全局作用域 |
块级作用域 {} |
块级作用域 {} |
| 变量提升 |
会提升,初始化为 undefined |
会提升,但存在“暂时性死区” |
会提升,但存在“暂时性死区” |
| 重复声明 |
允许 |
不允许(同作用域内) |
不允许(同作用域内) |
| 重新赋值 |
允许 |
允许 |
不允许 |
| 声明时赋值 |
可选 |
可选 |
必须赋值 |
对象的增强写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <script> const name = 'gongyu' const skills = 'play'
const obj = { name, skills, age:20 }
console.log(obj);
const obj1 = { name1:'xiaoyu', skills, introduce1:function(){ console.log(`my name is ${obj1['name1']},my skills are ${obj1['skills']}`); }, introduce2: () => { console.log(`my name is ${obj1['name1']},my skills are ${obj1['skills']}`); }, introduce3(){ console.log(`my name is ${obj1['name1']},my skills are ${obj1['skills']}`); } } obj1.introduce1() obj1.introduce2() obj1.introduce3()
</script>
|
类与对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <script>
class Student{
constructor(name, age, skill){ this.name = name this.age = age this.skill = skill }
introduce(){ console.log(`my name is ${this.name},my skills are ${this.skill}`); } } const s1 = new Student() const s2 = new Student('xiaoyu', 20, 'play') console.log(s2); s2.introduce()
</script>
|
Map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <script>
const map1 = new Map() map1.set('name', 'xiaoyu').set('age', 18) console.log(map1);
const age = map1.get('age') console.log(age); console.log(map1.has('name')); console.log(map1.has('name1')); for(let [key, value] of map1){ console.log(key,value); }
map1.forEach((key, value) => { console.log('forEach: ' + key,value); }) console.log(map1.keys());
console.log(map1.values());
console.log(map1.entries()); </script>
|
剩余参数
当你调用 add(10,15,20,45,10) 的时候,传进去的所有参数都会被 …number 收集起来,放进一个数组里。
也就是相当于:
number = [10, 15, 20, 45, 10]
1 2 3 4 5 6 7 8 9 10 11
| function add(...number){ let s = 0 for(let value of number){ s += value }
return s }
console.log(add(10,15,20,45,10));
|
VUE入门
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <p>{{title}}</p> <p>{{content}}</p> <p>{{1+2+3}}</p> <p>{{output()}}</p> <p>{{outputContent}}</p>
<p v-text="htmlContent"></p> <p v-html="htmlContent"></p>
<p v-for="item in 5">这是内容</p> <p v-if="true">标签内容</p> <p v-show="true">标签内容</p> <p v-bind:title='title'>这是内容</p> <p :title='title'>这是内容</p>
<button v-on: click="output">按钮</button> <button @click="output">按钮</button>
<input type="text" v-model="inputValue"> <p v-text="inputValue"></p>
<input type="text" v-model.trim="inputValue">
</div> <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script> <script> const vm = new Vue({ el: '#app', data (){ return { title: 'title', content: 'text', htmlContent:'这是一个<span>span</span>标签', bool: true, inputValue: '默认内容'
} }, methods:{ output(){ return 'text' + this.title } }, computed: { outputContent(){ return 'text' + this.title } },
watch:{ title(newValue, oldValue){ console.log(newValue,oldValue); } } }) </script> </body> </html>
|
v-if和v-show的区别
在 Vue.js 中,v-if 和 v-show 都能控制元素的显示与隐藏,但它们的底层逻辑和性能消耗完全不同。
简单来说:v-if 是“彻底消失”,而 v-show 只是“躲起来了”。
1. 核心区别对照表
| 特性 |
v-if (条件渲染) |
v-show (条件展示) |
| 实现方式 |
DOM 销毁/重建。为 false 时,元素在 HTML 中根本不存在。 |
CSS 切换。始终保留在 DOM 中,只是切换 display: none;。 |
| 编译过程 |
惰性的。如果初始值为 false,则什么都不做。 |
无论初始值是什么,元素都会被编译并保留。 |
| 性能消耗 |
切换开销大。每次切换都要重新生成/卸载组件或 DOM。 |
初始渲染开销大。无论是否显示,都会先加载。 |
| 支持语法 |
支持 <template> 标签,支持 v-else。 |
不支持 <template>,不支持 v-else。 |
2. 形象比喻
3. 该选哪一个?
选 v-if 的场景:
选 v-show 的场景:
一句话总结:
如果需要频繁切换显示状态,用 v-show;如果在运行时条件很少改变,或者有明显的条件分支逻辑,用 v-if。
[up主专用,视频内嵌代码贴在这]