JavaScript(下文咱們會用簡稱JS來代替)是腳本編程語言,JS語言開發的文件是以.js爲後綴,經過在html文件中引入該js文件來控制html代碼的交互功能以及前臺數據處理的業務邏輯(js語言代碼也能夠直接寫在html文件中),採用的ECMAScript語法,屬於編程語言。javascript
ECMAScript目前廣泛使用的存在ES5與ES6兩個版本css
<div id="box" onclick="this.style.backgroundColor = 'red'"></div>
<script> box.style.backgroundColor = 'pink' </script>
<script src="js/外聯.js">
js/外聯.js
html
box.style.background = 'blue'
// 關鍵字 變量名 = 變量值 // 關鍵字四種:不寫也至關於定義一個window.變量名的變量 | var | let | const n1 = 10; // 全局變量 // console.log(n1); var n2 = 20; // 局部變量 // alert(n2); let n3 = 30; // 塊級變量 // document.write(n3); const N4 = 40; // 常量 // console.log(N4); // N4 = 50; // 報錯,常量值不能修改
// 值類型 // 1) 數字類型:number var num1 = 10; var num2 = 3.14; console.log(num1, num2); console.log(typeof(num1), typeof num2); // 2) 字符串類型:string var s1 = '單引號的字符串'; var s2 = "雙引號的字符串"; console.log(s1, s2); console.log(typeof s1, typeof s2); var s3 = `多行字符串: 再來一行`; console.log(typeof s3, s3); // 3) 布爾類型:boolean var b1 = true; var b2 = false; console.log(b1, b2); console.log(typeof b1, typeof b2); // console.log(true + true); // 1+1 // 4) 未定義類型:undefined var owen; console.log(owen); var nick = undefined; console.log(nick); // 引用類型 // 5) 對象類型 var obj = new Object(); console.log(typeof obj, obj); var obj2 = {}; console.log(typeof obj2, obj2); // 6) 函數類型 var fn = function () {}; console.log(typeof fn, fn); // 其它 // 7) 空類型 var jerry = null; console.log(typeof jerry, jerry); // 8) 數組 var arr = [1, 3, 2, 5, 4]; console.log(typeof arr, arr); // 9) 時間 var date = new Date(); console.log(typeof date, date);
// 隨機數: Math.random() - (0, 1) // console.log(Math.random()); // 正整數區間[m, n] // (0, 1) * 10 => (0, 10) 取值parseInt() => [0, 9] + 5 => [5, 14] // parseInt(Math.random() * 11) + 5 => [5, 15] // [m, n] => +的值就是m,*的值 n - m + 1 // parseInt(Math.random() * (n - m + 1)) + m => [m, n] var r_num = parseInt(Math.random() * (14 - 7 + 1)) + 7; console.log(r_num); // (0, 1) * 超大的數 取整 // 一個正整數 % num => [0, num-1] + m => [m, num-1+m] => n = num+m-1 => num = n-m+1 // 一個正整數 % (n-m+1) + m => [m, n] var random_num = parseInt( Math.random() * 10000000000 % (14 - 7 + 1) ) + 7; console.log(random_num)
// 1)算術運算符:+ - * / % ++ -- | += ... console.log(5 / 2); // 2.5 console.log(parseInt(5 / 2)); console.log(parseFloat(5 / 2)); // parseInt | parseFloat 能夠完成 string => number res = parseInt('3.14.15abc'); console.log(res); // 從頭日後找整數部分 res = parseFloat('3.14.15abc'); console.log(res); // 從頭日後找小數部分(最多隻識別一個小數點) res = parseInt('a3.14.15abc'); // NaN console.log(typeof res, res); // 2) 弱語言類型的js res = 10 + '5'; console.log(res); // 字符串:105 res = 10 - '5'; console.log(res); // 數字:5 // 數字 => 字符串 res = '' + 5; console.log(typeof res, res); // 字符串 => 數字 res = +'5'; console.log(typeof res, res); // 3) 自增自減 num = 10; num += 1; console.log(num); num++; console.log(num); num--; console.log(num); // 瞭解:符號 在前優先級高於一切運算符,在後優先級比賦值符還低 // ++在前先自增再運算;++在後先運算再自增 num = 10; res = num++; console.log(num, res); num = 10; res = ++num; console.log(num, res); // 4) 比較運算符的比較 console.log(5 == '5'); // true,只作值比較 console.log(5 === '5'); // false,作值與類型比較 console.log(5 != '5'); // false,只作值比較 console.log(5 !== '5'); // true,作值與類型比較 // 5)邏輯運算符 && || ! console.log(true && true); console.log(false || false); console.log(!true); // 短路現象 // &&: 有假則假,前爲假,後不用判斷 num = 10; console.log(false && ++num); // num++ | ++num 都被短路不會被執行 console.log(num); console.log(true || ++num); // num++ | ++num 都被短路不會被執行 console.log(num); // 6)三元運算符(三目運算符) // 條件 ? 結果1 : 結果2 res = 5 == '5' ? '值相等':'值不等'; console.log(res);
// 1)if分支結構 /* python * if 條件: * 代碼塊1 * elif 條件: * 代碼塊2 * else: * 代碼塊3 * */ /** js * if (條件) { * 代碼塊1 * } * else if (條件) { * 代碼塊2 * } * else { * 代碼塊3 * } */ var num = parseInt(Math.random() * 16); console.log(num); if (num > 10) { console.log("產生的數超過10") } else if (5 <= num && num <= 10) { console.log("產生的數間於5~10") } else { console.log("產生的數不超過5") } // 2)switch分支結構 /* month = parseInt(Math.random() * (2 - 0 + 1)) + 0; console.log(month); switch (month) { case 1: console.log('1月31天'); break; // 用來結束case,跳出switch分支結構 case 2: console.log('2月28天'); break; default: // 沒有走任何case,會進入default分支 console.log('月份參數有誤'); } */ month = parseInt(Math.random() * (12 - 1 + 1)) + 1; console.log(month); switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: console.log('%s月31天', month); break; // 用來結束case,跳出switch分支結構,多個分支能夠共享一個break case 2: console.log('2月28天'); break; case 4: case 6: case 9: case 11: console.log('%s月30天', month); break; default: // 沒有走任何case,會進入default分支,沒有錯誤的狀況能夠省略 console.log('月份參數有誤'); }
循環結構java
// 1) for循環 /* for (循環變量①; 條件表達式②; 增量③) { 循環體④ } 生命週期:① ②④③...②④③ ② */ // 1~10直接的偶數 for (var i = 1; i <= 10; i++) { if (i % 2 === 0) { console.log(i); } } // continue | break // 1 2 4 5 for (var i = 1; i <= 5; i++) { if (i === 3) continue; console.log(i) } // 1 2 3 for (var i = 1; i <= 5; i++) { if (i > 3) break; console.log(i) } // 瞭解 var i = 1; for (; i <= 5;) { console.log(i); i++ } // 2)while var i = 1; while (i <= 5) { console.log(i); i++; } // 3)do...while循環:先執行一次循環體,再判斷條件 var num = 90; do { console.log(num); num++; } while (num <= 100); // for:解決知道循環次數的循環 // while: // 解決一切for與do...while能解決的問題(結合函數的思想) // 解決不知道循環次數的循環(循環用break結合) // do...while:完成循環體必需要提早執行一次的循環
/* 函數 定義: 關鍵字 函數名(參數列表) { 函數體; 返回值 } var 函數名 = 關鍵字(參數列表) { 函數體; 返回值 } var 函數名 = (參數列表) => { 函數體; 返回值 } 函數成員: 函數名:函數名存放的就是函數的地址 經過 函數名() 調用函數的 參數列表:將外界資源傳給內部的橋樑 你傳你的,我收個人,用...接收可變長 函數體:解決需求的代碼塊 功能代碼塊 返回值:將內部數據反饋給外部 只能返回一個值,不寫或空return返回undefined 匿名函數: 沒有聲明名字的函數 產生一個局部做用域 資源回收快 */
// 定義 function add(n1, n2) { return n1 + n2 } // 使用 res = add(10, 20); console.log(res); // 函數名的運用 my_add = add; console.log(my_add(100, 200)); // 參數列表:你傳你的,我收個人,用...接收可變長 // 少傳未接收到的形參賦值爲undefined,多傳的實參自動被丟棄 function fn(n1, n2) { console.log('傳輸的n1:%s | n2:%s', n1, n2) } fn(10, 20); fn(); fn(100); fn(1000, 2000, 3000); // 可變長參數 function func(...num) { console.log(num) } func(1, 2, 5, 3, 4);
// 匿名函數 // 匿名函數的自調用 - 調用一次後就會被回收資源 (function () { console.log('匿名函數') })(); // 用變量接收 - 函數的第二種聲明方式 var fun = function () { console.log('函數的第二種聲明方式') }; fun(); // 函數的第三種聲明方式 var fun2 = (n1, n2) => { // 有函數體標明{} console.log('n1:%s | n2:%s', n1, n2); return n1 + n2 }; console.log(fun2(222, 444)); var fun3 = (n1, n2) => n1 + n2; // 只有返回值能夠省略{} console.log(fun3(222, 444));
// 匿名函數自調用,能夠產生局部做用域與外界隔離 (function () { let number = 888 })() // console.log(number) // 外界不能夠直接訪問
function fn() { n1 = 10; // 只有全局變量外界才能訪問 var n2 = 20; let n3 = 30; const n4 = 40; } fn(); console.log(n1); if (true) { // 塊級做用域 n1 = 10; var n2 = 20; let n3 = 30; // let與const聲明的變量右塊級做用域 const n4 = 40; // 常量 } console.log(n1); console.log(n2); { let aaa = 10 }
// string => str // 1)聲明 // 單引號 | 雙引號 | 反引號 // 2)字符串拼接 res = 'you are' + ' ' + 'good man!'; console.log(res); // 3)字符串的切片 s = 'you are good man!'; n_s = s.slice(8, 12); console.log(n_s); // good // 4)字符串替換 s = 'you are good man!'; n_s = s.replace('man', 'woman'); console.log(n_s); // 5)字符串拆分 s = 'you are good man!'; res = s.split(' '); console.log(res); // 6)字符串迭代 s = 'abcdef'; for (num of s) { console.log(num) }
// array => list // 1)聲明 arr = [1, 4, 2, 3, 5]; console.log(arr); // 2)反轉 arr.reverse(); console.log(arr); // 3)組合 str = arr.join('@'); console.log(str); // 4)切片 new_arr = arr.slice(1, 4); console.log(new_arr); // 5)排序 arr.sort(); console.log(arr); // 6)增刪改查 // 查:只有正向索引 console.log(arr[2]); // 增 arr.push(888); // 尾增 console.log(arr); arr.unshift(666); // 首增 console.log(arr); // 刪 res = arr.pop(); // 尾刪 console.log(arr, res); res = arr.shift(); // 首刪 console.log(arr, res); // 增刪改 綜合方法:splice // 三個參數:開始操做的索引 操做的位數 操做的結果(可變長) arr = [1, 2, 3, 4, 5]; // 數組長度:arr.length arr.splice(arr.length, 0, 666, 888); console.log(arr);
// object => dict // 1)定義 height = 180; dic = { 'name': 'Owen', // 本質是對象 age: 18, // 全部的key(屬性名)都是字符串類型,因此能夠省略引號 height, // 當value爲變量,且變量名與key同名,能夠省略value }; console.log(dic); // 2)訪問 console.log(dic.name); console.log(dic['age']); // 3)增刪改 // 增 dic.sex = '男'; console.log(dic); // 刪 delete dic.sex; console.log(dic); // 改 dic.name = 'Nick'; console.log(dic);
一、js變量:不寫 | var | let | const
二、js的基本數據類型:值類型:number | string | boolean | undefined 引用類型:object | function 其它: null | Array | Date
三、隨機數:parseInt(Math.random() * (n - m + 1)) + m
四、類型轉換:"" + number => string | +string => number | parseInt(string) => number
五、運算符:/ | ++ | === | &&、||、! | 條件? 結果1:結果2
六、類型的運用:string | [1, 2, 3] splice(index, count, args) | {}
七、流程控制
八、函數
function 函數名(){}
var 函數名 = function (){}
let 函數名 = () => {}python