Python JavaScript


JavaScript

一 JavaScript是什么(html網頁的動態效果):

  JavaScript(下文我們會用簡稱JS來代替)是腳本編程語言,JS語言開發的文件是以.js為后綴,通過在html文件中引入該js文件來控制html代碼的交互功能以及前台數據處理的業務邏輯(js語言代碼也可以直         接寫在html文件中),采用的ECMAScript語法,屬於編程語言。

注意:JavaScript跟Java沒有半毛錢關系,純粹是為了蹭當時紅極一時java的熱度.

二 JavaScript三種書寫位置(css也是三種)

① 行間式(JS代碼書寫在標簽的事件全局屬性中,采用的是JS編程語言的語法)

<!-- 關鍵代碼 -->
<!-- 給div標簽添加點擊事件的交互邏輯:彈出文本提示框 -->
<div onclick="alert('點擊我完成頁面交互')">點我</div>

② 內聯式(JS代碼書寫在script標簽中)

JS代碼書寫在script標簽中,script標簽可以出現在頁面中的任意位置,建議放在body標簽的最后(html代碼
是自上而下進行解析加載,放在body標簽的最下方,會保證頁面所有標簽都加載完畢,html再去加載js文件,
那么js腳步文件就會更好的控制頁面標簽的人機交互了),采用的是JS編程語言的語法
<!-- 關鍵代碼 --> <!-- 頁面被加載打開時,就會觸發事件的交互邏輯:彈出文本提示框 --> <body> <!-- body標簽中的所有子標簽位置 --> <!-- script標簽出現在body標簽的最下方 --> <script> alert('該頁面被加載!') </script> </body>

③ 外聯式(文件引入)

JS代碼書在外部js文件中,在html頁面中用script標簽引入js文件(建議在body標簽最下方引入,理由同上)

#1.js文件夾下的my.js
alert('外聯式js文件彈出框')

#2.根目錄下的first.html
<!-- 關鍵代碼 -->
<!-- 頁面被加載打開時,就會觸發事件的交互邏輯:彈出文本提示框 -->
<body>
    <!-- body標簽中的所有子標簽位置 -->
    
    <!-- script標簽出現在body標簽的最下方 -->
    <script src="js/my.js">
        /* 不要在此寫JS代碼,原因是用來引入外部js文件的script標簽,標簽內部書寫的JS代碼不在起作用 */
    </script>
</body>

總結:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #dd {
            width: 200px;
            height: 200px;
            background-color: orange;
        }
    </style>

</head>
<body>
    <!-- 點擊彈出:hello js -->
    <!--行間式: 寫在標簽的 事件屬性 中-->
    <!--<div id="dd" onclick="alert('hello js')"></div>-->
    <div id="dd"></div>

</body>
<!--內聯式:寫在script標簽中,script標簽應該出現在body的最下方(可以將其放在body結束后)-->
<script>
    dd.onclick = function () {
        alert('hello js')
    }
</script>

<!--外聯式:通過script標簽的src屬性,鏈接外部js文件-->
<script src="js/js導入.js">
    // 一個script標簽擁有src引入外部js文件后,就相當於單標簽,所以內部的代碼會被自動屏蔽
    dd.onclick = function () {  // 不會起作用
        alert(666)
    }
</script>
</html>
三種引入總結

 

三 JavaScript注釋

#1.js注釋:
    單行注釋   /單行內容/
    
    多行注釋   /多行內容  /

#2.js語言是以分號(;)作為語句的結束符
一般情況下不加分號也不會報錯

四  JavaScript基礎語法

https://www.cnblogs.com/Dominic-Ji/p/9111021.html

① 變量的定義(變量名是區分大小寫的,var與python一樣可覆蓋賦值let不可以)

ECMA6最新語法

#1.變量關鍵字var與let的區別:
    var作用的是全局
    let作業的是局部,可以保證變量的不被隨意的修改(指的是是所聲明的變量只在let命令所在的代碼塊內有效。例如:for循環的計數器就很適合使用let命令。)
 例:
  var/let是關鍵詞、num是變量名、=為賦值符、10為變量值、;為JS語言語句的結束標識符
  var num = 10;

for (let i=0;i<arr.length;i++){...}
 #2.在js中 是有真正意義上的常量,聲明常量關鍵字const
const PI
= 3.14; (常量聲明時必須賦初值,且一旦賦值,不可改變)
#
3.變量的命名規范
1. 由字母,數字,_,$組成,不能以數字開頭(可以包含中文字符) 2. 區分大小寫 3. 不能出現關鍵字及保留字
#4.注意

     變量名是區分大小寫的。

     推薦使用駝峰式命名規則。

     保留字不能用做變量名。

② 基本數據類型

#1.數值類型:number(js中將整型和浮點型統稱為數值類型

var num = 10;
const PI = 3.14;
console.log(typeof(num), num);  // 結果:number  10

NaN:是數值類型但是表示的意思是不是一個數字

#2.字符串類型:string(單雙引號定義)

var s1 = "雙引號可以表示字符串";
var s2 = '單引號可以表示字符串';
console.log(typeof(s1), s1);  // 結果:string  雙引號可以表示字符串
字符串定義

    

 // 字符串
    // 1)定義:
    let ss = '123abc呵呵';
    let res;
    console.log(ss);
    // 2)索引
    res = ss[0];
    console.log(res);
    // 3)切片
    res = ss.slice(3, 6);
    console.log(res);
    // 4)替換
    res = ss.replace('abc', 'ABC');
    console.log(res);
    // 5)拆分: string => array
    res = ss.split('');
    console.log(res);
    // 6) 拼接
    res = ss + ss;
    console.log(res);
    // 7) 迭代
    for (s of ss) {
        console.log(s);
    }
事例 
#1.string.slice(start, stop)和string.substring(start, stop):

兩者的相同點:
如果start等於end,返回空字符串
如果stop參數省略,則取到字符串末
如果某個參數超過string的長度,這個參數會被替換為string的長度

substirng()的特點:
如果 start > stop ,start和stop將被交換
如果參數是負數或者不是數字,將會被0替換

silce()的特點:
如果 start > stop 不會交換兩者
如果start小於0,則切割從字符串末尾往前數的第abs(start)個的字符開始(包括該位置的字符)
如果stop小於0,則切割在從字符串末尾往前數的第abs(stop)個字符結束(不包含該位置字符)
 
#2.字符串拼接推薦使用加號
#3.萬能占位符:${變量名}
字符串拼接 占位符 substring與slice區別

#字符串和數值類型補充

parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。
parseFloat("123.456")  // 返回123.456

 

 

 

#3.數組(類似於python中的列表)

let arr = [1, 2, 3];
console.log(arr, typeof(arr));  [1,2,3] 'object'
數組定義

 let arr = [3, 1, 2, 4, 5];
    res = arr.join('');  // 默認,  |  ''  |  '自定義符合'
    console.log(res);
    // 迭代
    for (a of arr) {
        console.log(a);
    }
    // 排序
    // arr.sort();
    // arr.reverse();
    // console.log(arr);

    // 增刪改查
    console.log(arr[4]);
    arr[4] = 555;
    console.log(arr[4]);

    arr.push(100);  // 尾增
    arr.unshift(200);  // 頭增
    console.log(arr);

    arr.pop();  // 尾刪
    arr.shift();  // 頭增
    console.log(arr);

    // 重點:增刪改
    console.log(arr);
    // 開始操作的索引 操作的長度 操作后的結果(不定長0~n個)
    arr.splice(2, 1, 222, 333, 444);
    console.log(arr);

    // 不定長參數
    function f(...a) {
        console.log(a)
    }
    f(1, 2, 3, 4, 5, 6)
常用內置方法
遍歷數組元素
var a = [10, 20, 30, 40];
for (var i=0;i<a.length;i++) {
  console.log(a[i]);
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#4.對象類型(相當於dict所有的key必須是字符串)

// 增刪改查
    dic = {};
    //
    dic['name'] = 'owen';
    dic.age = 18;
    //
    dic.age = 20;
    // 對象的刪除
    delete dic.age;
    console.log(dic);
    //
    console.log(dic.name);

    // 字典的迭代用 for in
    for (k in dic) {
        console.log(k);
    }
對象定義和常用方法

 

 

 

  #data對象

#創建對象
//方法1:不指定參數
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:參數為日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:參數為毫秒數
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());

//方法4:參數為年月日小時分鍾秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString());  //毫秒並不直接顯示

#常用方法
var d = new Date(); 
//getDate()                 獲取日
//getDay ()                 獲取星期
//getMonth ()               獲取月(0-11)
//getFullYear ()            獲取完整年份
//getYear ()                獲取年
//getHours ()               獲取小時
//getMinutes ()             獲取分鍾
//getSeconds ()             獲取秒
//getMilliseconds ()        獲取毫秒
//getTime ()                返回累計毫秒數(從1970/1/1午夜)
data對象

#5.布爾類型(小寫:true和false)

""(空字符串)、0、null、undefined、NaN都是false。

var b1 = true;
var b2 = false;
console.log(typeof(b1), b1);  // 結果:boolean  true

null和undefined區別:
null表示值是空,一般在需要指定或清空一個變量時才會使用,如 name=null;
undefined表示當聲明一個變量但未初始化時,該變量的默認值是undefined。還有就是函數無明確的返回值時,返回的也是undefined。

ull表示變量的值是空(null可以手動清空一個變量的值,使得該變量變為object類型,值為null),undefined則表示只聲明了變量,但還沒有賦值。
View Code

③ 運算符

 

 

#1.賦值運算符

 

 

 

 注意:

 

#2.比較運算符

 

 

 

 

 注意

let aaa = 123;
let bbb = '123';

console.log(aaa == bbb);  // == 只做數據比較   true
console.log(aaa === bbb);  // === 做數據與類型比較 false
//上面這張情況出現的原因在於JS是一門弱類型語言(會自動轉換數據類型),所以當你用兩個等號進行比較時,JS內部會自動先將
//數值類型的1轉換成字符串類型的1再進行比較,所以我們以后寫JS涉及到比較時盡量用三等號來強制限制類型,防止判斷錯誤
 
        

#3.邏輯運算符

 

 

 #4.三目運算符

/ 得到結果 = 條件表達式 ? 條件成立結果 1: 條件不成立結果2;
// 語法規則:條件表達式成立,將結果1賦值給結果,反正賦值結果2

 

 

 

④ 分支結構

#if分支

#1.基礎語法
if (條件表達式) {
    代碼塊;
}

// 1. 當條件表達式結果為true,會執行代碼塊;反之不執行
// 2. 條件表達式可以為普通表達式
// 3. 0、undefined、null、""、NaN為假,其他均為真

#2.復雜語法

// 1.雙分支
if (表達式1) {
    代碼塊1;
} else {
    代碼塊2;
}


// 2.多分支
if (表達式1) {
    
} else if (表達式2) {
    
} 
...
else if (表達式2) {
    
} else {
    
}


事例1:
var a = 10;
if (a > 5){
  console.log("yes");
}else {
  console.log("no");
}

事例2:
var a = 10;
if (a > 5){
  console.log("a > 5");
}else if (a < 5) {
  console.log("a < 5");
}else {
  console.log("a = 5");
}
View Code
#if嵌套
if (表達式1) {
    if (表達式2) {
        
    }
}
View Code

 

 

 

#switch匹配

var day = new Date().getDay();
switch (day) {
  case 0:
  console.log("Sunday");
  break;
  case 1:
  console.log("Monday");
  break;
default:
  console.log("...")
}

switch中的case子句通常都會加break語句,否則程序會繼續執行后續case中的語句。
View Code

 

 

 

⑤ 循環結構

#for循環

for (循環變量①; 條件表達式②; 循環變量增量③) {
    代碼塊④;
}
// for循環執行的順序:① ②④③ ... ②④③ ②,入口為①,出口為②,②④③就是循環過程

// 案例:
for (var i = 0; i < 5; i++) {
    console.log(i);
}

// 結果:
0
1
2
3
4
for循環

 

#for…in迭代器

var arr = [1, 2, 3, 4, 5]
for (num in arr) {
    console.log(num);
}

// 結果:
0
1
2
3
4
// 1. break:結束本層循環
// 2. continue:結束本次循環進入下一次循環

#while循環

while (條件表達式) {
    代碼塊;
}
// 條件滿足執行代碼塊,條件不滿足跳出循環

// 案例:
var i = 0;
while (i < 5) {
    console.log(i);
    i++;
}

// 結果:
0
1
2
3
4

⑦ 函數

#1.有參無參函數定義及調用
function 函數名 (參數列表) {
    函數體;
}

function 函數名 () {
    函數體;
}

#調用
函數名(參數列表)

#2.匿名函數及調用
function () {
        // 沒有名字的函數就是匿名函數
    }

// 需求需要一個函數地址,就可以傳入一個匿名函數
function fn100(fn) {
        fn()
    }
fn100( function () { console.log('傳進去的匿名函數') } )

// 用變量接收匿名函數:第二種聲明函數的方式
let f = function (a, b) {
        console.log('ffffffffff')
    };
f();

#3.立即調用函數
// 立即執行函數 書寫立即執行的函數,首先先寫兩個括號()()這樣防止書寫混亂
(function(a, b){
  return a + b;
})(1, 2);
函數

#函數參數

// 個數不需要統一
function fn (a, b, c) {
    console.log(a, b, c)  // 結果:100 undefined undefined
}
fn(100);  // 並未給b,c傳值

function fn (a) {
    console.log(a)  // 結果:100
}
fn(100, 200, 300);  // 200,300被丟棄

// 可以任意位置具有默認值
function fn (a, b=20, c, d=40) {
    console.log(a, b, c, d)  // 100 200 300 40
}
fn(100, 200, 300);  // 一定按照先后順序依次傳參

// 通過...語法接收多個值
function fn (a, ...b) {
    console.log(a, b)  // 100 [200 300]
}
fn(100, 200, 300)
// ...變量必須出現在參數列表最后
View Code

# 函數返回值(函數只能返回一個值,如果要返回多個值,只能將其放在數組或對象中返回。

function fn () {
    return 返回值;
}
// 1.可以空return操作,用來結束函數
// 2.返回值可以為任意js類型數據
// 3.函數最多只能擁有一個返回值
View Code

#作用域(首先在函數內部查找變量,找不到則到外層函數查找,逐步找到最外層。與python作用域關系查找一模一樣!

函數中的arguments參數

function add(a,b){
  console.log(a+b);
  console.log(arguments.length);
 console.log(arguments[0]);//arguments相當於將出傳入的參數全部包含,這里取得就是第一個元素1
}

add(1,2)

 

 ES6中允許使用“箭頭”(=>)定義函數。

var f = v => v;
// 等同於
var f = function(v){
  return v;
}

var f = () => 5;
// 等同於
var f = function(){return 5};

var sum = (num1, num2) => num1 + num2;
// 等同於
var sum = function(num1, num2){
  return num1 + num2;  //這里的return只能返回一個值,如果想返回多個值需要自己手動給他們包一個數組或對象中
}
View Code

 

 

JSON對象(序列化和反序列化)

var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串轉換成對象
var obj = JSON.parse(str1); 
// 對象轉換成JSON字符串
var str = JSON.stringify(obj1);

RegExp對象(正則)

// 定義正則表達式兩種方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;

// 正則校驗數據
reg1.test('jason666')
reg2.test('jason666')

/*第一個注意事項,正則表達式中不能有空格*/ 

// 全局匹配
var s1 = 'egondsb dsb dsb';
s1.match(/s/)
s1.match(/s/g)
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
reg2.test('egondsb');
reg2.test('egondsb');
reg2.lastIndex;
/*第二個注意事項,全局匹配時有一個lastIndex屬性*/

// 校驗時不傳參數
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
reg2.test();
reg2.test(undefined);

var reg3 = /undefined/;
reg3.test();
View Code

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM