1.js基础语法
1.Js基礎(chǔ)語法 1.數(shù)據(jù)類型 JavaScript不區(qū)分整數(shù)和浮點(diǎn)數(shù),統(tǒng)一用Number表示 NaN; // NaN表示Not a Number,當(dāng)無法計(jì)算結(jié)果時用NaN表示 Infinity; // Infinity表示無限大,當(dāng)數(shù)值超過了JavaScript的Number所能表示的最大值時,就表示為Infinity 2.比較運(yùn)算符 要特別注意相等運(yùn)算符==。JavaScript在設(shè)計(jì)時,有兩種比較運(yùn)算符: 第一種是==比較,它會自動轉(zhuǎn)換數(shù)據(jù)類型再比較,很多時候,會得到非常詭異的結(jié)果; 第二種是===比較,它不會自動轉(zhuǎn)換數(shù)據(jù)類型,如果數(shù)據(jù)類型不一致,返回false,如果一致,再比較。 由于JavaScript這個設(shè)計(jì)缺陷,不要使用==比較,始終堅(jiān)持使用===比較。 另一個例外是NaN這個特殊的Number與所有其他值都不相等,包括它自己: NaN === NaN; // false 唯一能判斷NaN的方法是通過isNaN()函數(shù): isNaN(NaN); // true 最后要注意浮點(diǎn)數(shù)的相等比較: 1 / 3 === (1 - 2 / 3); // false 這不是JavaScript的設(shè)計(jì)缺陷。浮點(diǎn)數(shù)在運(yùn)算過程中會產(chǎn)生誤差,因?yàn)橛?jì)算機(jī)無法精確表示無限循環(huán)小數(shù)。要比較兩個浮點(diǎn)數(shù)是否相等,只能計(jì)算它們之差的絕對值,看是否小于某個閾值: Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true null和undefined null表示一個“空”的值,它和0以及空字符串''不同,0是一個數(shù)值,''表示長度為0的字符串,而null表示“空”。 在其他語言中,也有類似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。但是,在JavaScript中,還有一個和null類似的undefined,它表示“未定義”。 JavaScript的設(shè)計(jì)者希望用null表示一個空的值,而undefined表示值未定義。事實(shí)證明,這并沒有什么卵用,區(qū)分兩者的意義不大。大多數(shù)情況下,我們都應(yīng)該用null。undefined僅僅在判斷函數(shù)參數(shù)是否傳遞的情況下有用。 3.數(shù)組 3.1聲明數(shù)組: 數(shù)組用[]表示,元素之間用,分隔。 或者:new Array(1, 2, 3, "hello"); 3.2改變數(shù)組長度: var arr = [1, 2, 3]; arr.length;//這時候長度是3 arr.legth = 7;//這時長度變?yōu)?,其中后面4個為未定義的; 3.3數(shù)組的常用方法: indexOf();//查找數(shù)組中元素的下標(biāo) slice();//用下標(biāo)值截取數(shù)組中的參數(shù)返回新數(shù)組,不輸入?yún)?shù)返回所有 push();//在Array后添加若干個變量 pop();//刪除數(shù)組的最后一個元素 unshift();//在數(shù)組最前面添加元素 shift();//刪除數(shù)組最前面的一個元素 sort()://排序數(shù)組 reverse();//反轉(zhuǎn)數(shù)組順序 splice(0, 1, "good", "food");//按照下標(biāo)值增刪改元素(只輸下標(biāo)值為刪除) concat();//合并數(shù)組,類似“+”號使用 join("*");使用指定符號鏈接數(shù)組元素 4.對象 4.1JavaScript的對象是一組由鍵-值組成的無序集合,例如: var person = { name: 'Bob', age: 20, tags: ['js', 'web', 'mobile'], city: 'Beijing', hasCar: true, zipcode: null }; JavaScript對象的鍵都是字符串類型,值可以是任意數(shù)據(jù)類型。上述person對象一共定義了6個鍵值對,其中每個鍵又稱為對象的屬性,例如,person的name屬性為'Bob',zipcode屬性為null。 要獲取一個對象的屬性,我們用對象變量.屬性名的方式: person.name; // 'Bob' person.zipcode; // null 4.2in操作符 "name" in person;//判斷name是否存在于person中true person.hasOwnProperty("name");//判斷name屬性是否為自身擁有(非繼承)true 5.變量 js是動態(tài)語言,可以兼容多種類型: var a = 10.0; a = "你好"; 6.strict模式(全局變量聲明) 不聲明變量類型,則為全局變量,如: i = 15; 在代碼的第一行聲明"use strict"則進(jìn)入嚴(yán)格模式,嚴(yán)格模式下禁止不聲明變量類型而直接使用; 7.拼接字符串: 1.一般情況下使用”+“標(biāo)示即可 2.字符太多可使用ES6模板字符串方式: 例子: var name = '小明'; var age = 20; var message = `你好, ${name}, 你今年${age}歲了!`; alert(message); 8.字符串的常用方法; 8.1獲取字符串長度: var s = 'Hello, world!'; s.length; // 13 8.2使用數(shù)組下標(biāo)(索引)取值: var s = 'Hello, world!'; s[0]; // 'H' s[6]; // ' ' s[7]; // 'w' s[12]; // '!' s[13]; // undefined 超出范圍的索引不會報錯,但一律返回undefined 注意:使用字符串索引方式賦值是不允許的;續(xù)上: s[7] = "q";//內(nèi)容還是w,不發(fā)生變化; 8.3JavaScript為字符串提供了一些常用方法,注意,調(diào)用這些方法本身不會改變原有字符串的內(nèi)容,而是返回一個新字符串: toUpperCase toUpperCase()把一個字符串全部變?yōu)榇髮?#xff1a; var s = 'Hello'; s.toUpperCase(); // 返回'HELLO' toLowerCase toLowerCase()把一個字符串全部變?yōu)樾?#xff1a; var s = 'Hello'; var lower = s.toLowerCase(); // 返回'hello'并賦值給變量lower lower; // 'hello' indexOf indexOf()會搜索指定字符串出現(xiàn)的位置: var s = 'hello, world'; s.indexOf('world'); // 返回7 s.indexOf('World'); // 沒有找到指定的子串,返回-1 substring substring()返回指定索引區(qū)間的子串: var s = 'hello, world' s.substring(0, 5); // 從索引0開始到5(不包括5),返回'hello' s.substring(7); // 從索引7開始到結(jié)束,返回'world' 9.for...in...遍歷數(shù)組(類似java增強(qiáng)的for循環(huán)) var o = { name: 'Jack', age: 20, city: 'Beijing' }; for (var key in o) { alert(key); // 'name', 'age', 'city' } 10.數(shù)據(jù)結(jié)構(gòu)Map和set(都無法使用下標(biāo)遍歷) 數(shù)據(jù)結(jié)構(gòu)set不許重復(fù)key 10.1Map的方法: var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); m.set("dog",88);//增加元素 m.get('dog'); // 88 10.2Set的方法: "use strict" var m = new Set([1,2,3]); m.add(5); m.delete(1);//刪除1這個元素 10.3Map和Set的遍歷 使用for...of...遍歷 Set:var m = new Set([1,2,3]); for (var k of m) { alert(k); } Map:var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]); m.set("dog",88);//增加元素 m.get('dog'); // 88 for (var k of m) { alert(k); } 10.4for...in...和for...of...的區(qū)別 var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x in a) { alert(x); // '0', '1', '2', 'name' } var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x of a) { alert(x); // 'A', 'B', 'C' }
轉(zhuǎn)載于:https://www.cnblogs.com/Nick-Hu/p/8320211.html
總結(jié)
- 上一篇: 迟到的2017年终总结与2018目标规划
- 下一篇: (转)计算机网络基础知识总结