2019-06-01 js第八天

01作用域與全局變量

//1. 作用域:

? ? //? ? ? ? 全局作用域 - 整個頁面都是 范圍,本質(zhì)上就是 指的 window對象

? ? //? ? ? ? 局部作用域 - 函數(shù)內(nèi)部的范圍

? ? //2. 全局變量 和 局部變量

? ? //? ? ? ? 全局變量 : 在 全局作用域中 聲明的 變量 就叫 全局變量? -- 函數(shù)外面聲明的變量?。?/p>

? ? //? ? ? ? ? ? ? ? ? ? 特例:在函數(shù)內(nèi)部 聲明變量時 如果 不是使用 var關(guān)鍵字,那么 也是聲明 全局變量?。。?/p>

? ? //? ? ? ? 局部變量 :? 在 局部作用域中 聲明的 變昂 就叫 局部變量? -- 函數(shù)內(nèi)部聲明的變量?。?/p>

? ? var a = 110;

? ? function aa() {

? ? ? var b = 120;

? ? ? c = 150; //全局變量: 在函數(shù)內(nèi)部 聲明變量時 如果 不是使用 var關(guān)鍵字,那么 也是聲明 全局變量!??!

? ? }

? ? 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); // 報錯?。?!

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);//報錯

? ? 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)建 空對象

? ? var obj = {}; //new Object();

? ? //2.創(chuàng)建 帶 初始值 的對象

? ? // var obj = {

? ? //? name: '小白',

? ? //? age: 18,

? ? //? say:function(){

? ? //? }

? ? // };

? ? //3.為 對象 動態(tài)添加成員(屬性,方法)

? ? obj.name = '我是新增的成員的值';

? ? obj.age = 18;

? ? var obj1 = {

? ? ? name: '我是新增的成員的值'

? ? };

? ? obj1.age = 19;

? ? console.log(obj);

? ? console.log(obj1);

? ? //3.寫一個構(gòu)造函數(shù),用來創(chuàng)建 保存 圖書信息 的對象

? ? //? 包含 三個屬性(bookName,bookPages,bookPrice) 和 一個方法(showInfo -- 用來顯示書籍的三個屬性)

? ? //【構(gòu)造函數(shù)】:存在的目的 就是 為 new關(guān)鍵字 傳入的 空對象 添加 共同 屬性 和 方法

? ? function BookInfo(bName, bPage, bPrice) {

? ? ? // this 就是 new 關(guān)鍵字調(diào)用 本函數(shù)時 傳入的 空對象

? ? ? this.bookName = bName;

? ? ? this.bookPages = bPage;

? ? ? this.bookPrice = bPrice;

? ? ? this.showInfo = function () {

? ? ? ? console.log('我是一本書~~~');

? ? ? }

? ? }

? ? //new 關(guān)鍵字:? a.創(chuàng)建空對象? var obj = new Object();? --> var obj = { };

? ? //? ? ? ? ? ? ? b.將空對象 傳給 構(gòu)造函數(shù)里的 this? ? this = obj

? ? //? ? ? ? ? ? ? c.調(diào)用構(gòu)造函數(shù)

? ? //? ? ? ? ? ? ? d.返回第一步創(chuàng)建的對象? return obj;

? ? var book1 = new BookInfo('進(jìn)化心理學(xué)', 400, 52);

? ? var book2 = new BookInfo('JS高級編程', 600, 73);

? ? console.log(book1);

? ? console.log(book2);

04關(guān)于this

// this 就是函數(shù)內(nèi)部的一個特殊 屬性(變量)

? ? //1.寫代碼時,腦子里可以這么想: 某個對象 方法 里的 this 就是 這個對象

? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? 因?yàn)?要調(diào)用 一個對象里的方法時,大部分情況 都是 通過這個 對象.方法() 去調(diào)用的

? ? //2.本質(zhì)上說:對象 方法里的 this,就是 : 【誰.出這個方法,方法里的this就是誰】

/*? */

? ? //1. 聲明一個 全局函數(shù) ,可以 共享給 其他對象使用? ? -------------------------

? ? var showCar =? function () {

? ? ? console.log('我是【' + this.pinPai + '】車~~~');

? ? }

? ? // 2. 兩個對象 的 show 方法 共享 一個 全局函數(shù) showCar---------------------------

? ? var carObj1 = {

? ? ? pinPai: '保時捷',

? ? ? 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. 通過 不同 對象 調(diào)用 show 方法? -----------------------------

? ? carObj1.show(); // 此刻 方法里的 this 是 carObj1

? ? carObj2.show(); // 此刻 方法里的 this 是 carObj1

05常見api日期對象

// api? (application program interface)? --> 函數(shù)? ——> 別人寫好的函數(shù)

? ? // 函數(shù) 有是那種叫法:

? ? //? ? ? ? ? ? ? ? ? a.函數(shù) - 寫在 對象外面的

? ? //? ? ? ? ? ? ? ? ? b.方法 - 寫在 對象里面的

? ? //? ? ? ? ? ? ? ? ? c.api -? 別人寫的,我們來用

? ? // 日期對象 Date? ? ,? ? 數(shù)組對象 Array? ? ,? 字符串 String

? ? //1. 創(chuàng)建 日期對象

? ? 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 獲取小時

? ? ? 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號 0點(diǎn)0分0秒 到 現(xiàn)在 的 總毫秒數(shù)

? ? var allMillSeconds = dateObj.getTime().toString(); // '1559268784128'

? ? // 將 總毫秒數(shù) 轉(zhuǎn)換回? 正常的 日期時間 顯示

? ? 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對象

// 數(shù)組對象 -----------------------------------------------

? ? var arrCity = ['P城', 'C城', 'Y城', 'R城', '軍事基地'];

? ? //1.concat 連接 連個數(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ù)組 -- 直接 對 本數(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 個元素

? ? console.log(arrCity);

? ? // arrCity[1] = 'G港';

? ? //4.2 替換 指定元素

? ? arrCity.splice(1,2,'G港'); // 從下標(biāo)1刪除2個元素,并替換一個 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 的元素 前面 插入 一個元素 Z城

? ? console.log(arrCity);

07常見api;數(shù)組對象的堆棧方法

//1.push 從尾部 添加數(shù)組元素

? ? arrObj.push('P城');

? ? arrObj.push('R城');

? ? arrObj.push('Z城');

? ? arrObj.push('Y城');

? ? console.log(arrObj);

? ? //2.pop 從 尾部 取出 一個 元素

? ? var lastEle = arrObj.pop();

? ? console.log(arrObj);

? ? console.log('lastEle = ' + lastEle);

? ? // ----------------------------------------------

? ? //3.unshift 從頭部 添加 一個 元素

? ? var arrObj2 = [];

? ? arrObj2.unshift('小貓貓');

? ? arrObj2.unshift('小狗狗');

? ? arrObj2.unshift('小牛牛');

? ? console.log(arrObj2);

? ? //4.shift 從頭部 取出 一個 元素

? ? var firstEle = arrObj2.shift();

? ? console.log(arrObj2);

? ? console.log('firstEle = ' + firstEle);

? ? //5. 【棧 : 先進(jìn)后出】? --- 將 一個 元素 先 存入數(shù)組,會 最后一個 取出來 ----------------------------------

? ? // 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 【隊列實(shí)現(xiàn)方式: 先進(jìn)先出】? -- 將一個元素 先存入 數(shù)組,會 第一個 取出來

? ? // 兩種 實(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 :字符串對象的api

? ? var str = '我們都是最棒的 IT學(xué)習(xí)者~~~在前端的路上,一往無前,學(xué)無止境~~~';

? ? ? //1.charAt 返回 對應(yīng) 下標(biāo)的 字符 -------------------------------------

? ? ? var char1 = str.charAt(5);

? ? ? console.log(char1);

? ? ? //2.indexOf 返回 對應(yīng) 字符的 下標(biāo),如果 找不到 字符,就返回 -1 ---------

? ? ? //? ? ? ? ? 注意:如果 有多個 相同的目標(biāo)字符,返回 第一個 匹配字符的 下標(biāo)

? ? ? var index1 = str.indexOf('學(xué)')

? ? ? console.log(index1);

? ? ? //2.2 lastIndexOf 返回 對應(yīng)的 最后一個 字符的下標(biāo) ---------------------

? ? ? var index2 = str.lastIndexOf('學(xué)');

? ? ? console.log(index2);

? ? ? //2.3 找 第一個 出現(xiàn)的 前端 兩個字的下標(biāo)

? ? ? var index3 = str.indexOf('');

? ? ? console.log(index3);

? ? ? // 思考題:如何 獲取 字符串中 所有 匹配 字符的 下標(biāo)呢?

? ? ? // 關(guān)于 字符串 的 恒定性:字符串一旦創(chuàng)建,無法直接修改,只能重新創(chuàng)建一個新的字符串來覆蓋!

? ? ? //3.concat 連接字符串 -----------------------------------------------

? ? ? var str = '我喜歡你,你不知道,但沒關(guān)系~~~我家狗知道~~';

? ? ? // str+='討厭~~~';

? ? ? str = str.concat('討厭','死鬼','不早說~~~');

? ? ? console.log(str);

? ? ? //4. replace() 替換 指定的字符串 -----------------------------------

? ? ? var str = '我喜歡你,你不知道,你喜歡我嗎? 沒關(guān)系~~~我家狗知道~~';

? ? ? //4.1 默認(rèn) 只能替換 第一個 匹配的 字符串

? ? ? // str = str.replace('喜歡','討厭');

? ? ? //4.2 如果 要 將 所有匹配的 字符串都替換,需要使用 正則表達(dá)式

? ? ? str = str.replace(/喜歡/g,'討厭');

? ? ? console.log(str);

? ? ? //5.split() 將 字符串? 按照 分隔符 拆成 若干個 元素,存入 數(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 個字符,并返回

? ? ? 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ù)組的最后一個元素變成數(shù)組的第一個元素

? ? //把數(shù)組的第一個元素變成數(shù)組的最后一個元素

? ? 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 獲取 最后一個 o 的下標(biāo)

? ? ? var lastOIndex = str.lastIndexOf('o');

? ? ? //2.2 判斷 下標(biāo) 是否 > -1,如果大于,說明 找到了 一個 o,如果 不大于-1,說明 已經(jīng)沒有o了

? ? ? if (lastOIndex > -1) {

? ? ? ? //2.3 先將 下標(biāo) 存入 數(shù)組

? ? ? ? arrIndex.push(lastOIndex);

? ? ? ? //2.4 截取新字符串:從下標(biāo)0開始截取 到 o 下標(biāo)的 前一個位置

? ? ? ? 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. 把一個字符串中所有的空格全部去掉

? ? var str = 'i love u,but u dont know ~~~';

? ? str = str.replace(/ /g,'');

? ? console.log(str);

? ? //5. 統(tǒng)計一個字符串中每個字符出現(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.判斷 對象中 是否 有 與 字符 同名的 屬性

? ? ? if( charI in obj){

? ? ? ? //3.在 同名屬性 上,累加 次數(shù)

? ? ? ? obj[charI] += 1;

? ? ? }else{

? ? ? ? //4.如果 對象中 不存在 與 字符 同名的屬性,則 動態(tài)添加一個 ,設(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í)行,會 先 完成 ++操作,再去完成賦值

? ? //后自增:? var b = a++ , 普通算數(shù)和賦值運(yùn)算符 優(yōu)先于 后++,會先完成賦值,最后再去 完成++操作

? ? // 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í) 是把 ??臻g里的值 復(fù)制一份 給 另一個變量

? ? //? ? 傳參: 不管是 引用類型 還是 值類型 傳參,其實(shí) 就是 把 ??臻g里的 值 復(fù)制一份 給了 形參

? ? //? ? ? 區(qū)別:值類型 棧空間 里保存 的 是 值 本身

? ? //? ? ? ? ? 引用類型 ??臻g? 里保存 的是 對象 的 地址

? ? //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)中 ,任何一個分支條件 滿足,就會 執(zhí)行 分支代碼,并 跳出 整個 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ù),會進(jìn)入到函數(shù)內(nèi)部 逐句調(diào)試執(zhí)行

? ? //? ? f10 是 逐段 調(diào)試,遇到 函數(shù) 不會進(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);

? ? //擂臺思想 求 最大值

? ? 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('我是一個函數(shù)');

? ? ? // return undefined;

? ? }

? ? console.log(aaaaa());

? ? // 返回多個值

? ? function sendBack() {

? ? ? console.log('我要返回多個值~??!');

? ? ? // return [1,2,3,];

? ? ? return {

? ? ? ? a: 1,

? ? ? ? b: 2

? ? ? };

? ? }

? ? //回調(diào)函數(shù)

? ? function show(func) {

? ? ? func();

? ? }

? ? function bb() {

? ? }

? ? show(bb);

? ? // 對象的創(chuàng)建

? ? var obj = {

? ? ? name: '小白白'

? ? }; // new Object();

? ? obj.age = 19;

? ? obj.age = 100;

? ? delete obj.age;

? ? // for in 遍歷對象的屬性名稱

? ? for(var proName in obj){

? ? ? var proValue = obj[proName];

? ? ? console.log(proValue);

? ? }

14字符串的恒定性

? // --------------------------- 恒定性 ---------------------------

? ? var str = '小白';

? ? str += ',我愛你~~'

? ? // 一共出現(xiàn)了 3個字符串 的原因,就是因?yàn)?字符串恒定性:字符串 一旦創(chuàng)建 無法修改,只能銷毀

? ? // -------------------------------關(guān)于 值類型的 包裝器 -------------------

? ? var age = 1;

? ? // age.toString();

? ? // 當(dāng) 我們 調(diào)用 值類型數(shù)據(jù) 的 各種方法時,js引擎 偷偷幫我們創(chuàng)建了 對應(yīng)類型的 包裝器 對象,調(diào)用的 是 包裝器對象 里的方法

? ? var age1 = new Number(1);

? ? age1.toString()

? ? // var a = new Array();

? ? // 1.1 對象的字面量 表示法

? ? var obj1 = {

? ? ? name: 'james',

? ? ? age: 1

? ? };

? ? // ----------------------------------json ---------------------------------------------------------------

? ? var obj2 = {

? ? ? 'name': 'james',

? ? ? 'age': 1

? ? };

? ? // 將對象 轉(zhuǎn)成 json字符串,可以 方便 網(wǎng)絡(luò)傳輸,也方便 保存在本地硬盤

? ? var jsonStr = JSON.stringify(obj1);

? ? console.log(jsonStr);

? ? // 將 JSON字符串 轉(zhuǎn)成 對象 ,方便調(diào)用訪問

? ? var jsonObj =? JSON.parse(jsonStr);

? ? console.log(jsonObj);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容