01作用域與全局變量
//1. 作用域:
? ? //? ? ? ? 全局作用域 - 整個(gè)頁面都是 范圍浊闪,本質(zhì)上就是 指的 window對(duì)象
? ? //? ? ? ? 局部作用域 - 函數(shù)內(nèi)部的范圍
? ? //2. 全局變量 和 局部變量
? ? //? ? ? ? 全局變量 : 在 全局作用域中 聲明的 變量 就叫 全局變量? -- 函數(shù)外面聲明的變量R撕数冬!
? ? //? ? ? ? ? ? ? ? ? ? 特例:在函數(shù)內(nèi)部 聲明變量時(shí) 如果 不是使用 var關(guān)鍵字岩瘦,那么 也是聲明 全局變量!8蚺啊品山!
? ? //? ? ? ? 局部變量 :? 在 局部作用域中 聲明的 變昂 就叫 局部變量? -- 函數(shù)內(nèi)部聲明的變量!街州!
? ? var a = 110;
? ? function aa() {
? ? ? var b = 120;
? ? ? c = 150; //全局變量: 在函數(shù)內(nèi)部 聲明變量時(shí) 如果 不是使用 var關(guān)鍵字兼丰,那么 也是聲明 全局變量!K艚伞鳍征!
? ? }
? ? aa();
? ? console.log(c);
? ? console.log(window);
? ? // 只有 函數(shù)的 {} 才有局部作用域,其他的 都是 全局作用域
? ? //案例1 :
? ? {
? ? ? var num = 5;
? ? }
? ? console.log(num);//5
? ? //案例2
? ? var num = 5;
? ? if (num > 3) {
? ? ? var sum = 7;
? ? }
? ? console.log(sum); // 7
? ? //案例3?
? ? for (var i = 0; i < 10; i++) {
? ? }
? ? console.log(i); // 10
? ? //案例4 全局變量
? ? var name = "zs";
? ? function f() {
? ? ? // 全局變量 在函數(shù) 內(nèi)部 也能訪問
? ? ? name = "ww";
? ? }
? ? f();
? ? console.log(name); // ww
? ? //案例5? 局部變量
? ? function f() {
? ? ? var name1 = "zs";
? ? }
? ? f();
? ? console.log(name1); // 報(bào)錯(cuò)K霭s〖肌!
02變量的提升
? //
//var num = 10;
// fun();
// function fun(){
// console.log(num);
// var num = 20;
// }
? ? // a-----------------------------------
? ? function fun() {
? ? ? var num; // 局部變量的 聲明部分 被 提到函數(shù)的 最前端
? ? ? console.log(num); // undefined
? ? ? num = 20;
? ? }
? ? var num;
? ? num = 10; // 全局變量
? ? fun();
? ? // b-----------------------------------
? //? var a = 18;
// f1();
// function f1(){
// var b = 9;
// console.log(a);
// console.log(b);
// var a = '123';
// }
? ? function f1() {
? ? ? var a; // 局部變量的 聲明部分 被 提到函數(shù)的 最前端
? ? ? var b; // 局部變量的 聲明部分 被 提到函數(shù)的 最前端
? ? ? b = 9;
? ? ? console.log(a); // undefined
? ? ? console.log(b); // 9
? ? ? a = '123';
? ? }
? ? var a;
? ? a = 18;
? ? f1();
? ? // c-----------------------------------
? ? f1();
? ? console.log(c);//9
? ? console.log(b);//9
? ? console.log(a);//報(bào)錯(cuò)
? ? function f1() {
? ? ? var a = b = c = 9;
? ? ? //var a = 9;
? ? ? //b = 9;
? ? ? //c = 9;
? ? ? console.log(a);//9
? ? ? console.log(b);//9
? ? ? console.log(c);//9
? ? }
03構(gòu)造函數(shù)
//1.創(chuàng)建 空對(duì)象
? ? var obj = {}; //new Object();
? ? //2.創(chuàng)建 帶 初始值 的對(duì)象
? ? // var obj = {
? ? //? name: '小白',
? ? //? age: 18,
? ? //? say:function(){
? ? //? }
? ? // };
? ? //3.為 對(duì)象 動(dòng)態(tài)添加成員(屬性,方法)
? ? obj.name = '我是新增的成員的值';
? ? obj.age = 18;
? ? var obj1 = {
? ? ? name: '我是新增的成員的值'
? ? };
? ? obj1.age = 19;
? ? console.log(obj);
? ? console.log(obj1);
? ? //3.寫一個(gè)構(gòu)造函數(shù)质礼,用來創(chuàng)建 保存 圖書信息 的對(duì)象
? ? //? 包含 三個(gè)屬性(bookName,bookPages,bookPrice) 和 一個(gè)方法(showInfo -- 用來顯示書籍的三個(gè)屬性)
? ? //【構(gòu)造函數(shù)】:存在的目的 就是 為 new關(guān)鍵字 傳入的 空對(duì)象 添加 共同 屬性 和 方法
? ? function BookInfo(bName, bPage, bPrice) {
? ? ? // this 就是 new 關(guān)鍵字調(diào)用 本函數(shù)時(shí) 傳入的 空對(duì)象
? ? ? this.bookName = bName;
? ? ? this.bookPages = bPage;
? ? ? this.bookPrice = bPrice;
? ? ? this.showInfo = function () {
? ? ? ? console.log('我是一本書~~~');
? ? ? }
? ? }
? ? //new 關(guān)鍵字:? a.創(chuàng)建空對(duì)象? var obj = new Object();? --> var obj = { };
? ? //? ? ? ? ? ? ? b.將空對(duì)象 傳給 構(gòu)造函數(shù)里的 this? ? this = obj
? ? //? ? ? ? ? ? ? c.調(diào)用構(gòu)造函數(shù)
? ? //? ? ? ? ? ? ? d.返回第一步創(chuàng)建的對(duì)象? return obj;
? ? var book1 = new BookInfo('進(jìn)化心理學(xué)', 400, 52);
? ? var book2 = new BookInfo('JS高級(jí)編程', 600, 73);
? ? console.log(book1);
? ? console.log(book2);
04關(guān)于this
// this 就是函數(shù)內(nèi)部的一個(gè)特殊 屬性(變量)
? ? //1.寫代碼時(shí)旺聚,腦子里可以這么想: 某個(gè)對(duì)象 方法 里的 this 就是 這個(gè)對(duì)象
? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? 因?yàn)?要調(diào)用 一個(gè)對(duì)象里的方法時(shí),大部分情況 都是 通過這個(gè) 對(duì)象.方法() 去調(diào)用的
? ? //2.本質(zhì)上說:對(duì)象 方法里的 this眶蕉,就是 : 【誰.出這個(gè)方法砰粹,方法里的this就是誰】
/*? */
? ? //1. 聲明一個(gè) 全局函數(shù) ,可以 共享給 其他對(duì)象使用? ? -------------------------
? ? var showCar =? function () {
? ? ? console.log('我是【' + this.pinPai + '】車~~~');
? ? }
? ? // 2. 兩個(gè)對(duì)象 的 show 方法 共享 一個(gè) 全局函數(shù) showCar---------------------------
? ? var carObj1 = {
? ? ? pinPai: '保時(shí)捷',
? ? ? price: 2000000,
? ? ? owner: 'james',
? ? ? show: showCar // 將 全局函數(shù) showCar 設(shè)置給 carObj1 的 show
? ? };
? ? // carObj1.show();
? ? var carObj2 = {
? ? ? pinPai: '奔馳',
? ? ? price: 1000000,
? ? ? owner: 'james',
? ? ? show: showCar // 將 全局函數(shù) showCar 設(shè)置給 carObj2 的 show
? ? };
? ? // 3. 通過 不同 對(duì)象 調(diào)用 show 方法? -----------------------------
? ? carObj1.show(); // 此刻 方法里的 this 是 carObj1
? ? carObj2.show(); // 此刻 方法里的 this 是 carObj1
05常見api日期對(duì)象
// api? (application program interface)? --> 函數(shù)? ——> 別人寫好的函數(shù)
? ? // 函數(shù) 有是那種叫法:
? ? //? ? ? ? ? ? ? ? ? a.函數(shù) - 寫在 對(duì)象外面的
? ? //? ? ? ? ? ? ? ? ? b.方法 - 寫在 對(duì)象里面的
? ? //? ? ? ? ? ? ? ? ? c.api -? 別人寫的造挽,我們來用
? ? // 日期對(duì)象 Date? ? 碱璃,? ? 數(shù)組對(duì)象 Array? ? ,? 字符串 String
? ? //1. 創(chuàng)建 日期對(duì)象
? ? var dateObj = new Date();
? ? console.log(dateObj);
? ? //2. 格式化 日期顯示
? ? console.log(dateObj.toLocaleString());
? ? //3. 獲取 自定義的 日期格式 --------------------------------
? ? //? 2019年5月31日 9點(diǎn)59分59秒
? ? function getDateTime() {
? ? ? //3.1 獲取年
? ? ? var year = dateObj.getFullYear();
? ? ? console.log(year);
? ? ? //3.2 獲取月份 (0-11)
? ? ? var month = dateObj.getMonth() + 1;
? ? ? console.log(month);
? ? ? //3.3 獲取天
? ? ? // var day = dateObj.getDay(); // 獲取星期幾
? ? ? var day = dateObj.getDate();
? ? ? console.log(day);
? ? ? //3.4 獲取小時(shí)
? ? ? var hour = dateObj.getHours();
? ? ? console.log(hour);
? ? ? //3.5 獲取分鐘
? ? ? var minit = dateObj.getMinutes();
? ? ? console.log(minit);
? ? ? //3.6 獲取秒鐘
? ? ? var second = dateObj.getSeconds();
? ? ? console.log(second);
? ? ? var dateStr = year + '年' + month + '月' + day + '日 ' + hour + '點(diǎn)' + minit + '分' + second + '秒';
? ? ? return dateStr;
? ? }
? ? var strTime = getDateTime();
? ? console.log(strTime);
? ? //3.9 補(bǔ)充 : 獲取 毫秒數(shù) 總數(shù) --- 從 1970年1月1號(hào) 0點(diǎn)0分0秒 到 現(xiàn)在 的 總毫秒數(shù)
? ? var allMillSeconds = dateObj.getTime().toString(); // '1559268784128'
? ? // 將 總毫秒數(shù) 轉(zhuǎn)換回? 正常的 日期時(shí)間 顯示
? ? var date = changeDateFormatWithTime(allMillSeconds);
? ? console.log(date);
? ? function changeDateFormat(cellval) {
? ? ? if (!cellval) return "暫無";
? ? ? var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));
? ? ? var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
? ? ? var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
? ? ? date.get
? ? ? return date.getFullYear() + "-" + month + "-" + currentDate;
? ? }
? ? function changeDateFormatWithTime(cellval) {
? ? ? if (!cellval) return "暫無";
? ? ? var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));
? ? ? var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
? ? ? var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
? ? ? var hours = date.getHours() < 10 ? "0" + (date.getHours()) : date.getHours();
? ? ? var minute = date.getMinutes() < 10 ? "0" + (date.getMinutes()) : date.getMinutes();
? ? ? var second = date.getSeconds() < 10 ? "0" + (date.getSeconds()) : date.getSeconds();
? ? ? return date.getFullYear() + "-" + month + "-" + currentDate + " " + hours + ":" + minute + ":" + second;
? ? }
06常見api? 數(shù)組array對(duì)象
// 數(shù)組對(duì)象 -----------------------------------------------
? ? var arrCity = ['P城', 'C城', 'Y城', 'R城', '軍事基地'];
? ? //1.concat 連接 連個(gè)數(shù)組
? ? arrCity = arrCity.concat(['Z城','研究所']);
? ? console.log(arrCity);
? ? //2.join 將元素 拼接成 字符串 返回
? ? var strCitys = arrCity.join('|'); // 傳入的是 分隔符饭入,默認(rèn) 是 ,
? ? console.log(strCitys);
? ? console.log(strCitys.length);
? ? //3.reverse 翻轉(zhuǎn)數(shù)組 -- 直接 對(duì) 本數(shù)組 的元素做翻轉(zhuǎn)操作嵌器,不需要返回值
? ? arrCity.reverse();
? ? console.log(arrCity);
? ? //4.splice 刪除 和 替換 --------------------------------------
? ? var arrCity = ['P城', 'C城', 'Y城', 'R城', '軍事基地'];
? ? //? ? ? ? ? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? 4
? ? console.log(arrCity);
? ? //4.1 刪除 指定元素
? ? arrCity.splice(2,1); // 從 下標(biāo)2 開始刪,刪除 1 個(gè)元素
? ? console.log(arrCity);
? ? // arrCity[1] = 'G港';
? ? //4.2 替換 指定元素
? ? arrCity.splice(1,2,'G港'); // 從下標(biāo)1刪除2個(gè)元素谐丢,并替換一個(gè) G港 到 下標(biāo)1 的位置
? ? console.log(arrCity);
? ? var arrCity = ['P城', 'C城', 'Y城', 'R城', '軍事基地'];
? ? //? ? ? ? ? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? 4
? ? console.log(arrCity);
? ? // 4.3 插入 指定元素
? ? arrCity.splice(2,0,'Z城'); // 在 下標(biāo) 為 2 的元素 前面 插入 一個(gè)元素 Z城
? ? console.log(arrCity);
07常見api;數(shù)組對(duì)象的堆棧方法
//1.push 從尾部 添加數(shù)組元素
? ? arrObj.push('P城');
? ? arrObj.push('R城');
? ? arrObj.push('Z城');
? ? arrObj.push('Y城');
? ? console.log(arrObj);
? ? //2.pop 從 尾部 取出 一個(gè) 元素
? ? var lastEle = arrObj.pop();
? ? console.log(arrObj);
? ? console.log('lastEle = ' + lastEle);
? ? // ----------------------------------------------
? ? //3.unshift 從頭部 添加 一個(gè) 元素
? ? var arrObj2 = [];
? ? arrObj2.unshift('小貓貓');
? ? arrObj2.unshift('小狗狗');
? ? arrObj2.unshift('小牛牛');
? ? console.log(arrObj2);
? ? //4.shift 從頭部 取出 一個(gè) 元素
? ? var firstEle = arrObj2.shift();
? ? console.log(arrObj2);
? ? console.log('firstEle = ' + firstEle);
? ? //5. 【棧 : 先進(jìn)后出】? --- 將 一個(gè) 元素 先 存入數(shù)組爽航,會(huì) 最后一個(gè) 取出來 ----------------------------------
? ? // 5.1 兩種棧的實(shí)現(xiàn)方式:從頭部存,從頭部取? 乾忱;? ? 從 尾部存讥珍,從 尾部取
? ? var arrObj3 =[];
? ? //a.從頭部存,頭部取
? ? arrObj3.unshift('a');
? ? arrObj3.unshift('b');
? ? arrObj3.unshift('c');
? ? console.log(arrObj3);
? ? console.log(arrObj3.shift());
? ? console.log(arrObj3);
? ? console.log(arrObj3.shift());
? ? console.log(arrObj3);
? ? console.log(arrObj3.shift());
? ? console.log(arrObj3);
? ? //5.2 【隊(duì)列實(shí)現(xiàn)方式: 先進(jìn)先出】? -- 將一個(gè)元素 先存入 數(shù)組窄瘟,會(huì) 第一個(gè) 取出來
? ? // 兩種 實(shí)現(xiàn)方案: 從 頭部存衷佃,從尾部取 ;? 從 尾部存蹄葱,從頭部取
? ? //a. 頭部存氏义,從尾部取
? ? var arrObj4 = [];
? ? arrObj4.unshift('a');
? ? arrObj4.unshift('b');
? ? arrObj4.unshift('c');
? ? console.log(arrObj4);
? ? console.log(arrObj4.pop());
? ? console.log(arrObj4);
? ? console.log(arrObj4.pop());
? ? console.log(arrObj4);
? ? console.log(arrObj4.pop());
? ? console.log(arrObj4);
08常見api :字符串對(duì)象的api
? ? var str = '我們都是最棒的 IT學(xué)習(xí)者~~~在前端的路上,一往無前图云,學(xué)無止境~~~';
? ? ? //1.charAt 返回 對(duì)應(yīng) 下標(biāo)的 字符 -------------------------------------
? ? ? var char1 = str.charAt(5);
? ? ? console.log(char1);
? ? ? //2.indexOf 返回 對(duì)應(yīng) 字符的 下標(biāo)觅赊,如果 找不到 字符,就返回 -1 ---------
? ? ? //? ? ? ? ? 注意:如果 有多個(gè) 相同的目標(biāo)字符琼稻,返回 第一個(gè) 匹配字符的 下標(biāo)
? ? ? var index1 = str.indexOf('學(xué)')
? ? ? console.log(index1);
? ? ? //2.2 lastIndexOf 返回 對(duì)應(yīng)的 最后一個(gè) 字符的下標(biāo) ---------------------
? ? ? var index2 = str.lastIndexOf('學(xué)');
? ? ? console.log(index2);
? ? ? //2.3 找 第一個(gè) 出現(xiàn)的 前端 兩個(gè)字的下標(biāo)
? ? ? var index3 = str.indexOf('');
? ? ? console.log(index3);
? ? ? // 思考題:如何 獲取 字符串中 所有 匹配 字符的 下標(biāo)呢?
? ? ? // 關(guān)于 字符串 的 恒定性:字符串一旦創(chuàng)建饶囚,無法直接修改帕翻,只能重新創(chuàng)建一個(gè)新的字符串來覆蓋!
? ? ? //3.concat 連接字符串 -----------------------------------------------
? ? ? var str = '我喜歡你萝风,你不知道嘀掸,但沒關(guān)系~~~我家狗知道~~';
? ? ? // str+='討厭~~~';
? ? ? str = str.concat('討厭','死鬼','不早說~~~');
? ? ? console.log(str);
? ? ? //4. replace() 替換 指定的字符串 -----------------------------------
? ? ? var str = '我喜歡你,你不知道规惰,你喜歡我嗎睬塌? 沒關(guān)系~~~我家狗知道~~';
? ? ? //4.1 默認(rèn) 只能替換 第一個(gè) 匹配的 字符串
? ? ? // str = str.replace('喜歡','討厭');
? ? ? //4.2 如果 要 將 所有匹配的 字符串都替換,需要使用 正則表達(dá)式
? ? ? str = str.replace(/喜歡/g,'討厭');
? ? ? console.log(str);
? ? ? //5.split() 將 字符串? 按照 分隔符 拆成 若干個(gè) 元素,存入 數(shù)組揩晴,并返回 數(shù)組
? ? ? var str = 'i love u , do u love me~~~';
? ? ? var arr = str.split(' ');
? ? ? console.log(arr); // ["i", "love", "u", ",", "do", "u", "love", "me~~~"]
? ? ? //6.substr(index,count)? 從 指定 下標(biāo) 復(fù)制取出 count 個(gè)字符勋陪,并返回
? ? ? var str = 'i love u , do u love me~~~';
? ? ? var word = str.substr(2,4);
? ? ? console.log(str);
? ? ? console.log(word);
? ? ? //7substring(beginIndex,endIndex)? 截取范圍: beginIndex <= x? < endIndex
? ? ? var str = 'i love u , do u love me~~~';
? ? ? var word = str.substring(2,10);
? ? ? console.log(word);
? ? ? //8.toUpperCase() 將 字符串中 所有 英文字母 都轉(zhuǎn)成 大寫
? ? ? var str = 'i love u , do u love me~~~';
? ? ? str = str.toUpperCase();
? ? ? console.log(str);
? ? ? //9.toLowerCase() 將 字符串中 所有 英文字母 都轉(zhuǎn)成 小寫
? ? ? var str = 'I LOVE U , DO U LOVE ME~~~';
? ? ? str = str.toLowerCase();
? ? ? console.log(str);
09常見api綜合練習(xí)
//添加刪除數(shù)組練習(xí)
? ? //練習(xí)1
? ? var arr = ["劉備"];
? ? //添加數(shù)據(jù)后變成:["趙云","馬超","劉備","關(guān)羽","張飛"]
? ? arr.push('關(guān)羽', '張飛');
? ? arr.unshift("趙云", "馬超");
? ? console.log(arr);
? ? //刪除數(shù)據(jù)后變成:["關(guān)羽","張飛"]
? ? //練習(xí)2
? ? var arr = ["趙云", "馬超", "劉備", "關(guān)羽", "張飛"];
? ? //? ? ? ? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? 4? ? length = 5
? ? //把數(shù)組的最后一個(gè)元素變成數(shù)組的第一個(gè)元素
? ? //把數(shù)組的第一個(gè)元素變成數(shù)組的最后一個(gè)元素
? ? var temp = arr[0];
? ? arr[0] = arr[arr.length - 1];
? ? arr[arr.length - 1] = temp;
? ? console.log(arr);
? ? var arr = ["趙云", "馬超", "劉備", "關(guān)羽", "張飛"];
? ? //? ? ? ? ? ? 0? ? ? 1? ? ? 2? ? ? 3? ? ? 4? ? length = 5
? ? //截取["劉備","關(guān)羽"]
? ? // arr.splice(2,2);
? ? //在馬超后面增加 馬騰
? ? // arr.splice(2,0,'馬騰');
? ? //刪除關(guān)羽
? ? arr.splice(3, 1);
? ? console.log(arr);
? ? //1. 截取字符串"我愛中華人民共和國",中的"中華"
? ? var str = '我愛中華人民共和國';
? ? var str1 = str.substr(2, 2);
? ? console.log(str1);
? ? //2. "abcoefoxyozzopp"查找字符串中所有o出現(xiàn)的位置
? ? //? ? 分析:將 所有 o 的 下標(biāo) 都 找到 硫兰,并存入 數(shù)組诅愚,最后打印數(shù)組
? ? var str = 'abcoefoxyozzopp';
? ? //? ? ? ? abc o ef o xy o? z? z? o? pp
? ? //? ? ? ? 012 3 45 6 78 9? 10 11? 12
? ? var arrIndex = [];
? ? do {
? ? ? //2.1 獲取 最后一個(gè) o 的下標(biāo)
? ? ? var lastOIndex = str.lastIndexOf('o');
? ? ? //2.2 判斷 下標(biāo) 是否 > -1,如果大于劫映,說明 找到了 一個(gè) o违孝,如果 不大于-1,說明 已經(jīng)沒有o了
? ? ? if (lastOIndex > -1) {
? ? ? ? //2.3 先將 下標(biāo) 存入 數(shù)組
? ? ? ? arrIndex.push(lastOIndex);
? ? ? ? //2.4 截取新字符串:從下標(biāo)0開始截取 到 o 下標(biāo)的 前一個(gè)位置
? ? ? ? str = str.substring(0, lastOIndex);
? ? ? } else {
? ? ? ? break; //跳出循環(huán)
? ? ? }
? ? } while (true);
? ? console.log(arrIndex);
? ? //3. 把字符串中所有的o替換成!
? ? var str = 'abcoefoxyozzopp';
? ? str = str.replace(/o/g,'!');
? ? console.log(str);
? ? //4. 把一個(gè)字符串中所有的空格全部去掉
? ? var str = 'i love u,but u dont know ~~~';
? ? str = str.replace(/ /g,'');
? ? console.log(str);
? ? //5. 統(tǒng)計(jì)一個(gè)字符串中每個(gè)字符出現(xiàn)的次數(shù) ----------------------
? ? var str = 'abcoao';
? ? //思路分析:
? ? //? ? ? a. 將所有 出現(xiàn)的 字符 單獨(dú)保存泳赋,每種字符 只保存1次
? ? //? ? ? b. 保存 每種 字符 出現(xiàn) 的 次數(shù)
? ? //? ? ? ? { a:2 , b:1 , c:1 , o:2}
? ? var obj = {};
? ? for(var i = 0; i < str.length;i++){
? ? ? //1.取出 字符
? ? ? var charI = str[i];
? ? ? //2.判斷 對(duì)象中 是否 有 與 字符 同名的 屬性
? ? ? if( charI in obj){
? ? ? ? //3.在 同名屬性 上雌桑,累加 次數(shù)
? ? ? ? obj[charI] += 1;
? ? ? }else{
? ? ? ? //4.如果 對(duì)象中 不存在 與 字符 同名的屬性,則 動(dòng)態(tài)添加一個(gè) 祖今,設(shè)置默認(rèn)值為 1
? ? ? ? obj[charI] = 1;
? ? ? ? // obj.a = 1;? -> obj['a'] = 1
? ? ? }
? ? }
? ? console.log(obj);
10前自增和后自增
//前自增 :? var b = ++a , 優(yōu)先于 普通 算數(shù)和賦值運(yùn)算符 執(zhí)行校坑,會(huì) 先 完成 ++操作,再去完成賦值
? ? //后自增:? var b = a++ , 普通算數(shù)和賦值運(yùn)算符 優(yōu)先于 后++衅鹿,會(huì)先完成賦值撒踪,最后再去 完成++操作
? ? // var a = 1;
? ? // a++; // a = a + 1
? ? // console.log(a); // 2
? ? var a = 1;
? ? var b = a++;
? ? // 后++ 實(shí)際執(zhí)行 如下:
? ? // var b = a;
? ? // a = a + 1;
? ? console.log(b); // 1
? ? console.log(a);
? ? // ------------------------------------------
? ? var a = 1;
? ? var b = ++a;
? ? // 前++ 實(shí)際執(zhí)行 如下:
? ? // a = a + 1;
? ? // var b = a;
? ? console.log(b); // 2
? ? console.log(a); // 2
? ? // ---------------------------------------------
? ? var a = 1;
? ? var b = 2;
? ? var c = ++a + b++;
? ? // 前++ 實(shí)際執(zhí)行 如下:
? ? // a = a + 1;
? ? // var c = 2 + b;
? ? // b = b + 1;
? ? console.log(a); // 2
? ? console.log(b); // 3
? ? console.log(c); // 4
11引用類型和值類型
? // 總結(jié):
? ? //? ? 賦值: 不管是 引用類型 還是 值類型 變量 ,相互之間賦值大渤,其實(shí) 是把 椫仆空間里的值 復(fù)制一份 給 另一個(gè)變量
? ? //? ? 傳參: 不管是 引用類型 還是 值類型 傳參,其實(shí) 就是 把 棻萌空間里的 值 復(fù)制一份 給了 形參
? ? //? ? ? 區(qū)別:值類型 椄蹋空間 里保存 的 是 值 本身
? ? //? ? ? ? ? 引用類型 棧空間? 里保存 的是 對(duì)象 的 地址
? ? //1.簡單數(shù)據(jù)類型(值類型): Number, String, Boolean, Undefined, Null
? ? //1.1 值類型 賦值
? ? var age = 18;
? ? var myAge = age;
? ? myAge++;
? ? console.log(age); //18
? ? //1.2 值類型 傳參
? ? function changeNum(num) {
? ? ? num += 100;
? ? }
? ? var age1 = 100;
? ? changeNum(age1);
? ? console.log(age1); // 100
? ? //
? ? console.log('----------------------------------');
? ? //2.復(fù)雜數(shù)據(jù)類型(引用類型):Object , Function , Array , 自定義類型(構(gòu)造函數(shù))
? ? //1.1 引用類型 賦值
? ? var arr = [1, 2];
? ? var arr2 = arr;
? ? arr2[0] = 5;
? ? console.log(arr);
? ? //1.2 引用類型傳參
? ? var arr5 = ['不要再講了', '這不是擴(kuò)展呀'];
? ? function changeEle(arrObj) {
? ? ? arrObj[0] = '學(xué)無止境烫幕,回頭是岸';
? ? }
? ? changeEle(arr5);
? ? console.log(arr5); // ['學(xué)無止境俺抽,回頭是岸', '這不是擴(kuò)展呀'];
? </script>
12js八天的總復(fù)習(xí)
// console.log(undefined == null);
? ? // console.log(undefined === null);
? ? // 顯示類型轉(zhuǎn)換
? ? // 1 轉(zhuǎn)數(shù)值 parseInt()? parseFloat()? Number()
? ? // 2 轉(zhuǎn)字符串? toString()? String()?
? ? // 3 轉(zhuǎn)布爾值 Boolean()
? ? //? ? ? ? ? ? ? ? 轉(zhuǎn)false:0 -0 NaN , '' , null , undefined , false ,document.all
? ? //? ? ? ? ? ? ? ? 轉(zhuǎn)true :其他所有
? ? // 隱式類型轉(zhuǎn)換
? ? var a = 1 + 'a'; // var a= '1' + 'a';? ? var a = '1a';
? ? if (undefined) { // if( Boolean('') )
? ? ? console.log('true');
? ? } else {
? ? ? console.log('false');
? ? }
? ? // if 結(jié)構(gòu)中 ,任何一個(gè)分支條件 滿足较曼,就會(huì) 執(zhí)行 分支代碼磷斧,并 跳出 整個(gè) if結(jié)構(gòu)
? ? if (1 < 2) {
? ? }
? ? if (1 < 2) {
? ? } else {
? ? }
? ? if (1 < 2) {
? ? } else if (2 < 5) {
? ? ? console.log('我是分支代碼');
? ? } else {
? ? }
? ? console.log('我是結(jié)束');
? ? //switch case? 相當(dāng)于 if(變量 === 值)
? ? var age = 11;
? ? switch (age) {
? ? ? case 11: {
? ? ? ? break;
? ? ? }
? ? ? case 12: {
? ? ? ? break;
? ? ? }
? ? ? default: {
? ? ? }
? ? }
? ? aaa();
? ? //三元運(yùn)算符 ? :
? ? var gender = false;
? ? console.log('您的性別是:' + (gender ? '男' : '女'));
? ? function aaa() {
? ? ? console.log('hi~~');
? ? ? console.log('hi~~');
? ? ? console.log('hi~~');
? ? }
? ? //調(diào)試:f11 是 逐句 調(diào)試,遇到函數(shù)捷犹,會(huì)進(jìn)入到函數(shù)內(nèi)部 逐句調(diào)試執(zhí)行
? ? //? ? f10 是 逐段 調(diào)試弛饭,遇到 函數(shù) 不會(huì)進(jìn)入到函數(shù)內(nèi)部 逐句調(diào)試,而是直接一次性執(zhí)行完函數(shù)代碼萍歉,然后調(diào)試 后面的代碼
? ? //求 1-100之間 所有 能被 7 整除的數(shù)
? ? for (var i = 1; i <= 100; i++) {
? ? ? if (i % 7 == 0) {
? ? ? ? console.log(i);
? ? ? }
? ? }
? ? //籮筐思想 求1-100之間素有數(shù)的和 與 平均值
? ? var luoKuang = 0;
? ? for (var i = 1; i <= 100; i++) {
? ? ? luoKuang += i;
? ? }
? ? console.log(luoKuang);
? ? console.log(luoKuang / 100);
? ? //擂臺(tái)思想 求 最大值
? ? var arr = [4, 2, 6, 81, 8, 2, 3];
? ? var leiTai = arr[0];
? ? for (var i = 1; i < arr.length; i++) {
? ? ? if (arr[i] > leiTai) {
? ? ? ? leiTai = arr[i];
? ? ? }
? ? }
? ? console.log('最大值:' + leiTai);
? ? //遍歷數(shù)組
? ? var arr = [4, 2, 6, 81, 8, 2, 3];
? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? ? length = 7
? ? for (var i = 0; i < arr.length; i++) {
? ? ? console.log(i); // 0 1 2 3 4 5 6
? ? }
? ? console.log(i); // 7
? ? for (var i = arr.length - 1; i >= 0; i--) {
? ? ? console.log(i); // 6 5 4 3 2 1 0
? ? }
? ? console.log(i); // -1
? ? var arr1 = [12, 3, 4];
? ? function aaaaa() {
? ? ? // arguments
? ? ? console.log('我是一個(gè)函數(shù)');
? ? ? // return undefined;
? ? }
? ? console.log(aaaaa());
? ? // 返回多個(gè)值
? ? function sendBack() {
? ? ? console.log('我要返回多個(gè)值~B滤獭!');
? ? ? // return [1,2,3,];
? ? ? return {
? ? ? ? a: 1,
? ? ? ? b: 2
? ? ? };
? ? }
? ? //回調(diào)函數(shù)
? ? function show(func) {
? ? ? func();
? ? }
? ? function bb() {
? ? }
? ? show(bb);
? ? // 對(duì)象的創(chuàng)建
? ? var obj = {
? ? ? name: '小白白'
? ? }; // new Object();
? ? obj.age = 19;
? ? obj.age = 100;
? ? delete obj.age;
? ? // for in 遍歷對(duì)象的屬性名稱
? ? for(var proName in obj){
? ? ? var proValue = obj[proName];
? ? ? console.log(proValue);
? ? }
14字符串的恒定性
? // --------------------------- 恒定性 ---------------------------
? ? var str = '小白';
? ? str += '枪孩,我愛你~~'
? ? // 一共出現(xiàn)了 3個(gè)字符串 的原因憔晒,就是因?yàn)?字符串恒定性:字符串 一旦創(chuàng)建 無法修改藻肄,只能銷毀
? ? // -------------------------------關(guān)于 值類型的 包裝器 -------------------
? ? var age = 1;
? ? // age.toString();
? ? // 當(dāng) 我們 調(diào)用 值類型數(shù)據(jù) 的 各種方法時(shí),js引擎 偷偷幫我們創(chuàng)建了 對(duì)應(yīng)類型的 包裝器 對(duì)象拒担,調(diào)用的 是 包裝器對(duì)象 里的方法
? ? var age1 = new Number(1);
? ? age1.toString()
? ? // var a = new Array();
? ? // 1.1 對(duì)象的字面量 表示法
? ? var obj1 = {
? ? ? name: 'james',
? ? ? age: 1
? ? };
? ? // ----------------------------------json ---------------------------------------------------------------
? ? var obj2 = {
? ? ? 'name': 'james',
? ? ? 'age': 1
? ? };
? ? // 將對(duì)象 轉(zhuǎn)成 json字符串嘹屯,可以 方便 網(wǎng)絡(luò)傳輸,也方便 保存在本地硬盤
? ? var jsonStr = JSON.stringify(obj1);
? ? console.log(jsonStr);
? ? // 將 JSON字符串 轉(zhuǎn)成 對(duì)象 澎蛛,方便調(diào)用訪問
? ? var jsonObj =? JSON.parse(jsonStr);
? ? console.log(jsonObj);