let關(guān)鍵字
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>01_let關(guān)鍵字</title>
</head>
<body>
<button>測試1</button>
<br>
<button>測試2</button>
<br>
<button>測試3</button>
<br>
<!--
***let
1. 作用:
? * 與var類似, 用于聲明一個(gè)變量
2. 特點(diǎn):
? * 在塊作用域內(nèi)有效
? * 不能重復(fù)聲明
? * 不會(huì)預(yù)處理, 不存在變量提升
3. 應(yīng)用:
? * 循環(huán)遍歷加監(jiān)聽
? * 使用let取代var是趨勢
-->
<script type="text/javascript">
//面試題
//? console.log(username);//沒有預(yù)解析 會(huì)報(bào)錯(cuò)
let username = "kobe";//不能重復(fù)聲明
// let username = "wade";//不能重復(fù)聲明
? console.log(username);//沒有預(yù)解析 會(huì)報(bào)錯(cuò)
let btns = document.getElementsByName("button");
for(let i=0; i<btns.length; i++){
? var btn = btns[i];
? //var 無法獲取正確的索引
? btn.onclick = function () {
? ? alert(i);
? }
}
// (function (i) {
//? btn.onclick = function () {
//? ? alert(i)
//? }
// })(i)
</script>
</body>
</html>
const關(guān)鍵字
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>02_const關(guān)鍵字</title>
</head>
<body>
<!--
1. 作用:
? * 定義一個(gè)常量
2. 特點(diǎn):
? * 不能修改
? * 其它特點(diǎn)同let
3. 應(yīng)用:
? * 保存不用改變的數(shù)據(jù)
-->
<!--var是聲明變量 const是聲明常量-->
<!-- var 可以修改 const 不能修改-->
<script type="text/javascript">
var KEY = 'NBA';//var可修改
KEY = 'CBA'
const KEY = "NBA";//CBA
console.log(KEY);//CBA
const KEY = 'NBA';//const不可修改
//KEY ='CBA'; 當(dāng) var換成const時(shí),不能寫奇瘦,會(huì)報(bào)錯(cuò)
console.log(KEY);
</script>
</body>
</html>
變量的解構(gòu)賦值
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>03_變量的解構(gòu)賦值</title>
</head>
<body>
<!--
1. 理解:
? * 從對(duì)象或數(shù)組中提取數(shù)據(jù), 并賦值給變量(多個(gè))
2. 對(duì)象的解構(gòu)賦值
? let {n, a} = {n:'tom', a:12}
3. 數(shù)組的解構(gòu)賦值
? let [a,b] = [1, 'hello'];
4. 用途
? * 給多個(gè)形參賦值
-->
<script type="text/javascript">
let obj = {username:"kobe",age:"40"};
// let username = obj.username;
// let age = obj.age;
// let xxx = obj.xxx;//undefined
//username
? let{age} = obj;
console.log(age);
let arr? = [1,3,5,"abc",true];
// let[a,b,c,d,e] = arr;
// console.log(a,b,c,d,e);//1 3
let[,,a,b] = arr;
console.log(a,b);//5 "abc"
// function foo(obj) {
//? console.log(obj.username, obj.age);
// }
function foo({username,age}) {//{username.age}=obj
? console.log(username,age);
}
foo(obj);
</script>
</body>
</html>
模板字符串
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>04_模板字符串</title>
</head>
<body>
<!--
1. 模板字符串 : 簡化字符串的拼接
? * 模板字符串必須用 `` 包含
? * 變化的部分使用${xxx}定義
-->
<script type="text/javascript">
let obj = {username :"kobe",age:"40"};
// let str = "我的名字是:"+ obj.username + "我的年齡是"+ obj.age;
str = '我的名字是: ${obj.username},我的年齡: ${obj.age}';
// console.log(str)//我的名字是:kobe我的年齡是40
? console.log(str)
</script>
</body>
</html>
對(duì)象簡寫
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>05_簡化的對(duì)象寫法</title>
</head>
<body>
<!--
簡化的對(duì)象寫法
* 省略同名的屬性值
* 省略方法的function
* 例如:
? let x = 1;
? let y = 2;
? let point = {
? ? x,
? ? y,
? ? setX (x) {this.x = x}
? };
-->
<script type="text/javascript">
let username = "kobe";
let age = 40;
let obj = {
? username,
? age,
? getName(){
? ? return this,username;
}
}
console.log(obj);
console.log(obj.getName());
</script>
</body>
</html>
箭頭函數(shù)
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>06_箭頭函數(shù)</title>
</head>
<body>
? ? <button id="btn1">測試箭頭函數(shù)this_1</button>
? ? <button id="btn2">測試箭頭函數(shù)this_2</button>
<!--
* 作用: 定義匿名函數(shù)
* 基本語法:
? * 沒有參數(shù): () => console.log('xxxx')
? * 一個(gè)參數(shù): i => i+2
? * 大于一個(gè)參數(shù): (i,j) => i+j
? * 函數(shù)體不用大括號(hào): 默認(rèn)返回結(jié)果
? * 函數(shù)體如果有多個(gè)語句, 需要用{}包圍棘催,若有需要返回的內(nèi)容,需要手動(dòng)返回
* 使用場景: 多用來定義回調(diào)函數(shù)
* 箭頭函數(shù)的特點(diǎn):
? ? 1耳标、簡潔
? ? 2醇坝、箭頭函數(shù)沒有自己的this,箭頭函數(shù)的this不是調(diào)用的時(shí)候決定的,而是在定義的時(shí)候所處的對(duì)象就是它的this
? ? 3呼猪、擴(kuò)展理解: 箭頭函數(shù)的this看外層的是否有函數(shù)画畅,
? ? ? ? 如果有,外層函數(shù)的this就是內(nèi)部箭頭函數(shù)的this宋距,
? ? ? ? 如果沒有轴踱,則this是window。
-->
<script type="text/javascript">
// let fun = function () {
//? ? console.log('我是函數(shù)');
// }
// let fun = () => console.log("我是箭頭函數(shù)");
fun()
let fun1 = () => console.log("我是箭頭函數(shù)");//沒有參數(shù)要用括號(hào)占位
fun1();
let fun2 = a => console.log(a);//只有一個(gè)形參括號(hào)可以省略
fun2("aaa");
let fun3 = (x,y) => console.log(x,y);//多個(gè)形參括號(hào)不可以省略
fun3("23,45");
let fun4 = (x,y) => x + y;
console.log(fun4(34,26));//60
let fun5 = (x,y) =>{
? ? console.log(x,y);
? ? return x + y;
};
? ? console.log(fun5(35,49));//84
let btn1 = document.getElementById("btn1");
let btn2 = document.getElementById("btn2");
btn1.onclick = function () {
? ? alert(this);//[object HTMLButtonElement]
? ? console.log(this);
};
btn2.onclick = function () {
? ? alert(this);//[object windows]
? ? console.log(this);
};
// let obj = {
//? ? name:"箭頭函數(shù) ",
//? ? getName:function(){
//? ? ? ? btn2.onclick = () =>{
//? ? ? ? ? ? alert(this);//[object,Object]
//? ? ? ? ? ? con】sole.log(this);//{name : "箭頭函數(shù)",getName:f
//? ? }
//? ? }普通函數(shù)
// }
let obj = {
? ? name:"箭頭函數(shù) ",
? ? getName:() =>{
? ? ? ? btn2.onclick = () =>{
? ? ? ? ? ? alert(this);//[object,windows]
? ? ? ? ? ? console.log(this);//windows
? ? ? ? }
? ? }
}
// fun4()
</script>
</body>
</html>
三點(diǎn)運(yùn)算符
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>07_3點(diǎn)運(yùn)算符</title>
</head>
<body>
<!--
* 用途
1. rest(可變)參數(shù)
? ? * 用來取代arguments 但比 arguments 靈活,只能是最后部分形參參數(shù)
? ? function fun(...values) {
? ? ? ? console.log(arguments);
? ? ? ? arguments.forEach(function (item, index) {
? ? ? ? ? ? console.log(item, index);
? ? ? ? });
? ? ? ? console.log(values);
? ? ? ? values.forEach(function (item, index) {
? ? ? ? ? ? console.log(item, index);
? ? ? ? })
? ? }
? ? fun(1,2,3);
2. 擴(kuò)展運(yùn)算符
? let arr1 = [1,3,5];
? let arr2 = [2,...arr1,6];
? arr2.push(...arr1);
-->
<script type="text/javascript">
function foo(a,...value) {
? console.log(arguments);
? // arguments.callee();//遞歸
? //
? console.log(value);
? //? arguments.forEach(function (item,index) {
? //? console.log(item,index);
? // })
? value.forEach(function (item,index) {
? ? console.log(item,index);
? })
}
foo(2,65,33,34);
let arr = [1,6];
let arr1 = [2,3,4,5];
arr = [1,...arr1,6];
console.log(arr);//[1,2,3,4,5,6]
console.log(...arr);
</script>
</body>
</html>
形參默認(rèn)值
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>08_形參默認(rèn)值</title>
</head>
<body>
<!--
? ? * 形參的默認(rèn)值----當(dāng)不傳入?yún)?shù)的時(shí)候默認(rèn)使用形參里的默認(rèn)值
? ? function Point(x = 1,y = 2) {
this.x = x;
this.y = y;
? ? }
-->
<script type="text/javascript">
function Point(x=0,y=0) {
? this.x = x;
? this.y = y;
}
let point = new Point(23,35);
console.log(point);
let point1 = new Point();
console.log(point1);
</script>
</body>
</html>
Promise對(duì)象
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>11_Promise對(duì)象</title>
</head>
<body>
<!--
1. 理解:
? * Promise對(duì)象: 代表了未來某個(gè)將要發(fā)生的事件(通常是一個(gè)異步操作)
? * 有了promise對(duì)象, 可以將異步操作以同步的流程表達(dá)出來, 避免了層層嵌套的回調(diào)函數(shù)(俗稱'回調(diào)地獄')
? * ES6的Promise是一個(gè)構(gòu)造函數(shù), 用來生成promise實(shí)例
2. 使用promise基本步驟(2步):
? * 創(chuàng)建promise對(duì)象
? ? let promise = new Promise((resolve, reject) => {
? ? ? ? //初始化promise狀態(tài)為 pending
? ? ? //執(zhí)行異步操作
? ? ? if(異步操作成功) {
? ? ? ? resolve(value);//修改promise的狀態(tài)為fullfilled
? ? ? } else {
? ? ? ? reject(errMsg);//修改promise的狀態(tài)為rejected
? ? ? }
? ? })
? * 調(diào)用promise的then()
? ? promise.then(function(
? ? ? result => console.log(result),
? ? ? errorMsg => alert(errorMsg)
? ? ))
3. promise對(duì)象的3個(gè)狀態(tài)
? * pending: 初始化狀態(tài)
? * fullfilled: 成功狀態(tài)
? * rejected: 失敗狀態(tài)
4. 應(yīng)用:
? * 使用promise實(shí)現(xiàn)超時(shí)處理
? * 使用promise封裝處理ajax請(qǐng)求
? ? let request = new XMLHttpRequest();
? ? request.onreadystatechange = function () {
? ? }
? ? request.responseType = 'json';
? ? request.open("GET", url);
? ? request.send();
-->
<script type="text/javascript">
// // 創(chuàng)建Promise對(duì)象
//? let promise = new Promise((resolve,reject) => {
//
//? ? //初始化Promise狀態(tài) pending(初始化)
//? ? console.log("111");
//
//? ? //執(zhí)行異步操作谚赎,通常是發(fā)送AJAX請(qǐng)求淫僻,開啟定時(shí)器
//? ? setTimeout(() => {
//? ? ? console.log('333');
//? ? ? //根據(jù)異步任務(wù)的返回結(jié)果,去修改Promise的狀態(tài)
//? ? ? //異步任務(wù)執(zhí)行成功
//? ? ? resolve('哈哈');//修改Promise的狀態(tài)為fullfilled(成功狀態(tài))
//
//? ? ? //異步任務(wù)執(zhí)行失敗
//? ? ? reject('555');//修改Promise的狀態(tài)為rejected: 失敗狀態(tài)
//? ? }, 2000);
//? })
//
//? ? console.log('222');
//? promise.then((data) => {//成功的回調(diào)
//? ? console.log('成功了:健雳灵!!');
//? },(error) => {//失敗的回調(diào)
//? ? console.log('失敗了!U⒖悯辙!');
// })
// 定義獲取新聞的功能函數(shù)
function getNews(url){
let promise = new Promise((resolve, reject) => {
// 狀態(tài):初始化
// 執(zhí)行異步任務(wù)
// 創(chuàng)建xmlHttp實(shí)例對(duì)象
let xmlHttp = new XMLHttpRequest();
console.log(xmlHttp.readyState);
//綁定readyState監(jiān)聽
xmlHttp.onreadystatechange = function(){
if(xmlHttp.readyState === 4){
if(xmlHttp.status == 200){//請(qǐng)求成功
// console.log(xmlHttp.responseText);
//修改狀態(tài)
resolve(xmlHttp.responseText);//修改promise的狀態(tài)為成功的狀態(tài)
}else{//請(qǐng)求失敗
reject('暫時(shí)沒有新聞內(nèi)容');
}
}
};
// open設(shè)置請(qǐng)求的方式以及url
xmlHttp.open('GET', url);
// 發(fā)送
xmlHttp.send();
})
return promise;
}
getNews('http://localhost:3000/new?id=2')
? ? ? ? ? ? .tnen((data) =>{
? console.log(data);
},(error) => {
? console.log(error);
});
// getNews('http://localhost:30001/news?id=2')
// .then((data) => {
// console.log(data);
// // console.log(typeof data);
// // 準(zhǔn)備獲取評(píng)論內(nèi)容的url
// let commentsUrl = JSON.parse(data).commentsUrl;
// let url = 'http://localhost:3000' + commentsUrl;
// // 發(fā)送請(qǐng)求獲取評(píng)論內(nèi)容
// return getNews(url);
// }, (error) => {
// console.log(error);
// })
// .then((data) => {
// console.2log(data);
// }, () => {
// });
</script>
</body>
</html>