JavaScript 是一種具備面向對象能力的、解釋型的程序設計語言。更具體一點,它是基於對象和事件驅動並具備相對安全性的客戶端腳本語言。它的主要目的是,驗證發往服務器端的數據、增長 Web 互動、增強用戶體驗度等。javascript
ECMAScript定義的只是這門語言的基礎,與Web瀏覽器沒有依賴關係,而在基礎語法上能夠構建更完善的腳本語言。JavaScript的運行須要必定的環境,脫離了環境JavaScript代碼是不能運行的,JavaScript只可以寄生在某個具體的環境中才可以工做。JavaScript運行環境通常都由宿主環境和執行期環境共同構成,其中宿主環境是由外殼程序生成的,如Web瀏覽器就是一個外殼程序,它提供了 一個可控制瀏覽器窗口的宿主環境。執行期環境則由嵌入到外殼程序中的JavaScript引擎(或稱爲JavaScript解釋器)生成,在這個環境中 JavaScript可以生成內置靜態對象,初始化執行環境等。css
Web瀏覽器自定義的DOM組件,以面向對象方式描述的文檔模型。DOM定義了表示和修改文檔所需的對象、這些對象的行爲和屬性以及這些對象之間的關係。DOM對象,是咱們用傳統的方法(javascript)得到的對象。DOM屬於瀏覽器,而不是JavaScript語言規範裏的規定的核心內容。html
前面的DOM是爲了操做瀏覽器中的文檔,而爲了控制瀏覽器的行爲和操做,瀏覽器還提供了BOM(瀏覽器對象模型)。java
ECMAScript(基礎語法)json
JavaScript的核心語法ECMAScript描述了該語言的語法和基本對象數組
DOM(文檔對象模型)瀏覽器
文檔對象模型(DOM)—— 描述了處理網頁內容的方法和接口安全
BOM(瀏覽器對象模型)服務器
瀏覽器對象模型(BOM)—— 描述了與瀏覽器進行交互的方法和接口dom
控制檯的做用:
console對象表明瀏覽器的JavaScript控制檯,用來運行JavaScript命令,經常用來顯示網頁運行時候的錯誤信息。Elements用來調試網頁的html和css代碼。
JS須要和HTML一塊兒使用纔有效果,咱們能夠經過直接或間接的方式將JS代碼嵌入在HTML頁面中。
行內JS : 寫在標籤內部的js代碼
內部JS : 定義在script標籤內部的js代碼
外部JS : 單獨的js文件,在HTML中經過script標籤引入
咱們能夠將JavaScript代碼放在html文件中任何位置,可是咱們通常放在網頁的<font color="red">head</font>或者<font color="red">body</font>部分。因爲頁面的加載方式是<font color="red">從上往下依次加載</font>的,而這個對咱們放置的js代碼運行是有影響的。
放在<head>部分,最經常使用的方式是在頁面中head部分放置<script>元素,瀏覽器解析head部分就會執行這個代碼,而後才解析頁面的其他部分。
放在<body>部分,JavaScript代碼在網頁讀取到該語句的時候就會執行。
行內 JS:
<button onclick="alert('you clicked hered!!!')">click here</button>
內部 JS:
<script type="text/javascript" charset="utf-8"> alert('this is inner js code') </script>
外部 JS 文件:
hello.js
alert('this is a outter js document');
hello.html
<!-- 在須要使用js的html頁面中引入 --> <script src="js/hello.js" type="text/javascript" charset="utf-8"></script>
JavaScript程序的執行單位爲行(line),也就是一行一行地執行。通常狀況下,每一行就是一個語句。
語句(statement)是爲了完成某種任務而進行的操做,語句以分號結尾,一個分號即表示一個語句結束。多個語句能夠寫在一行內(不建議這麼寫代碼),可是一行寫多條語句時,語句必須以分號結尾。
表達式不須要分號結尾。一旦在表達式後面添加分號,則JavaScript引擎就將表達式視爲語句,這樣會產生一些沒有任何意義的語句。
單行註釋:用//起頭; 多行註釋:放在/* 和 */之間。 兼容html註釋方式:<!-- -->
標識符就是一個名字,用來給變量和函數進行命名,有特定規則和規範
規則:
由Unicode字母、_、$、數字組成、中文組成 (1)不能以數字開頭 (2)不能是關鍵字和保留字 (3)嚴格區分大小寫
規範:
(1)見名知意 (2)駝峯命名或下劃線規則
關鍵字也稱保留字,是被JavaScript徵用來有特殊含義的單詞
arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield、Infinity、NaN、undefined
變量即一個帶名字的用來存儲數據的內存空間,數據能夠存儲到變量中,也能夠從變量中取出數據。
JavaScript是一種弱類型語言,在聲明變量時不須要指明數據類型,直接用var修飾符進行聲明。
變量聲明和賦值:
// 先聲明再賦值 var a ; a = 10; // 聲明同時賦值 var b = 20;
(1)若只聲明而沒有賦值,則該變量的值爲undefined。
var box; console.log(box);
(2)變量要有定義才能使用,若變量未聲明就使用,JavaScript會報錯,告訴你變量未定義。
console.log(box2);
(3)能夠在同一條var命令中聲明多個變量。
var a, b, c = 10; console.log(a,b,c);
(4)若使用var從新聲明一個已經存在的變量,是無效的。
var box = 10 var box;
(5)若使用var從新聲明一個已經存在的變量且賦值,則會覆蓋掉前面的值
var box = 10; var box = 25;
(6)JavaScript是一種動態類型、弱類型語言,也就是說,變量的類型沒有限制,能夠賦予各類類型的值。
var box = 'hello world'; box = 10;
JavaScript 引擎的工做方式是,先解析代碼,獲取全部被聲明的變量,而後再一行一行地運行。這形成的結果,就是全部的變量的聲明語句,都會被提高到代碼的頭部,這就叫作變量提高。
console.log(msg); var msg = "so easy"; // 變量提高,至關於下面的代碼 var msg; console.log(msg); msg = "so easy"; // 說明: 最後的結果是顯示undefined,表示變量msg已聲明,但還未賦值。
注意:變量提高只對 var 命令聲明的變量有效,若是變量不是用 var 命令聲明的,就不會發生變量提高。
console.log(msg); msg = "error";
雖然說JS是弱類型語言,變量沒有類型,但數據自己是有類型的。針對不一樣的類型,咱們能夠進行不一樣的操做。
JavaScript 中有6 種數據類型,其中有五種簡單的數據類型:Undefined、Null、布爾、數值和字符串。一種複雜數據類型Object。
數 值(Number): 整數和小數(好比 1 和 3.14) 字符串(String): 字符組成的文本(好比"Hello World") 布爾值(Boolean):true(真)和 false(假)兩個特定值 Undefined: 表示「未定義」或不存在,即此處目前沒有任何值 Null: 表示空缺,即此處應該有一個值,但目前爲空 對象(object)(引用) : 各類值組成的集合 1)、對象(object){name:」zhangsan」,age:」18」} 2)、數組(array)[1,2,3] 3)、函數(function)function test() {}
undefined類型的值是undefined。
undefined 是一個表示"無"的原始值,表示值不存在。
出現undefined的常見狀況:
(1)當聲明瞭一個變量而沒有初始化時,這個變量的值就是undefined
var box; console.log(box); //undefined
(2)調用函數時,該函數有形參,但未提供實參,則該參數爲undefined。
function noData(str) { // js函數形參只須要變量名便可 console.log(str); // undefined } noData(); // 調用方法時,未傳遞參數
(3)函數沒有返回值時,默認返回 undefined。
// 方法沒有返回值 function noData() { console.log("Hello"); } var re = noData();// 定義變量接收無返回值的方法 console.log(re);
null類型是隻有一個值的數據類型,即特殊的值null。它表示空值,即該處的值如今爲空,它表示一個空對象引用。
使用Null類型值時注意如下幾點:
1)使用typeof操做符測試null返回object字符串。
2)undefined派生自null,因此等值比較返回值是true。未初始化的變量和賦值爲null的變量相等。
console.log(undefined == null); var box = null; // 賦值爲null的變量 var a; // 未初始化的變量 console.log(a == box); // 兩個的值相等
布爾類型有兩個值:true、false。經常使用來作判斷和循環的條件
數值型包含兩種數值:整型和浮點型。
1)全部數字(整型和浮點型)都是以 64 位浮點數形式儲存。因此,JS中1 與 1.0 相等,並且 1 加上 1.0 獲得的仍是一個整數。浮點數最高精度是17位小數,因爲浮點數運算時可能不精確,儘可能不要使用浮點數作判斷。
2)在存儲數值型數據時自動將能夠轉換爲整型的浮點數值轉爲整型。
console.log(1 == 1.0); // true console.log(1 + 1.0); // 2 var num = 8.0; // 自動將能夠轉換爲整型的浮點數轉爲整型 console.log(num); // 8
使用 ' ' 或 " "引發來,如:'hello',"good"。
使用加號 '+' 進行字符串的拼接,如:console.log('hello' + ' everybody');
對象是一組數據和功能的集合。
說明:
{}:表示使用對象字面量方式定義的對象。空的大括號表示定義包含默認屬性和方法的對象。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2iODTFgL-1606962755534)(/圖片1sdfgh.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-d5deSJgO-1606962755538)(/圖片1gh.png)]
JS 提供了 parseInt()和 parseFloat()兩個全局轉換函數。前者把值轉換成整數,後者把值轉換成浮點數。只有對 String 類型調用這些方法,這兩個函數才能正確運行;對其餘類型返回的都是 NaN(Not a Number)。
在轉換以前,首先會分析該字符串,判斷位置爲0處的字符,判斷它是不是個有效數字,若是不是,則直接返回NaN,再也不繼續,若是是則繼續,直到找到非字符
parseInt("1234blue"); // returns 1234 parseInt("22.5"); // returns 22 parseInt("blue"); // returns NaN
該方法與 parseInt() 方法的處理方式類似,從位置 0 開始查看每一個字符,直到找到第一個非有效的字符爲止,而後把該字 符以前的字符串轉換成數字。不過,對於這個方法來講,第一個出現的小數點是有效字符。若是有兩個小數點,第二個小數點將被看做無效的,parseFloat()方法會把這個小數點以前的字符串轉換成數字。
parseFloat("1234blue"); // returns 1234.0 parseFloat("22.5"); // returns 22.5 parseFloat("22.34.5"); // returns 22.34 parseFloat("blue"); //returns NaN
幾乎每一個數對象都提供了toString()函數將內容轉換爲字符串形式,其中Number提供的toString()函數能夠將數字轉換爲字符串。
Number還提供了toFixed()函數將根據小數點後指定位數將數字轉爲字符串,四捨五入
// 將內容轉換爲字符串形式 var data = 10 console.log(data.toString()) // 根據小數點後指定位數將數字轉爲字符串,四捨五入 data = 1.4; console.log(data.toFixed(0)); data = 1.49; console.log(data.toFixed(1)); // 不能對null和undefined使用 data = null console.log(data.toString()) data = undefined console.log(data.toString())
JS 爲 Number、Boolean、String 對象提供了構造方法,用於強制轉換其餘類型的數據。此時操做的是整個數據,而不是部分。
Number(false) 0 Number(true) 1 Number(undefined) NaN Number(null) 0 Number( "5.5 ") 5.5 Number( "56 ") 56 Number( "5.6.7 ") NaN Number(new Object()) NaN Number(100) 100 Boolean(""); // false – empty string Boolean("hi"); // true – non-empty string Boolean(100); // true – non-zero number Boolean(null); // false - null Boolean(0); // false - zero Boolean(new Object()); // true – object
最後一種強制類型轉換方法 String() 是最簡單的,由於它可把任何值轉換成字符串。要執行這種強制類型轉換,只須要調用做爲參數傳遞進來的值的 toString() 方法,即把 1 轉換成"1 ",把 true轉換成 "true ",把 false 轉換成 "false ",依此類推。強制轉換成字符串和調用 toString() 方法的惟一不一樣之處在於,對 null 或 undefined 值強制類型轉換能夠生成字符串而不引起錯誤:
var s1 = String(null); // "null" var oNull = null; var s2 = oNull.toString(); // won’t work, causes anerror
最爲簡單的一種轉換爲字符串的方式,直接在任意數據後面 + "" 便可。
運算符用於執行程序代碼運算,會針對一個及其以上操做數來進行運算。
運算符 | 描述 | 例子 | 結果 |
---|---|---|---|
+ | 加 | x=y+2 | x=7 |
- | 減 | x=y-2 | x=3 |
* | 乘 | x=y*2 | x=10 |
/ | 除 | x=y/2 | x=2.5 |
% | 求餘數 | x=y%2 | x=1 |
++ | 自增(前導加、後導加) | x=++y | x=6 |
-- | 自減(前導減、後導減) | x=--y | x=4 |
運算符 | 例子 | 等價於 | 結果 |
---|---|---|---|
= | x=y | x=5 | |
+= | x+=y | x=x+y | x=15 |
-= | x-=y | x=x-y | x=5 |
*= | x*=y | x=x*y | x=50 |
/= | x/=y | x=x/y | x=2 |
%= | x%=y | x=x%y | x=0 |
運算符 | 描述 | 例子 |
---|---|---|
== | 等於 | x==8 爲 false |
=== | 全等(值和類型) | x===5 爲 true;x==="5" 爲 false |
!= | 不等於 | x!=8 爲 true |
> | 大於 | x>8 爲 false |
< | 小於 | x<8 爲 true |
>= | 大於或等於 | x>=8 爲 false |
<= | 小於或等於 | x<=8 爲 true |
運算符 | 描述 | 例子 | ||||
---|---|---|---|---|---|---|
&& | and | (x < 10 && y > 1) 爲 true | ||||
\ | \ | or | (x==5 \ | \ | y==5) 爲 false | |
! | not | !(x==y) 爲 true |
運算符 | 描述 | 例子 |
---|---|---|
?: | 若是…不然… | 3>5?3:5 |
咱們寫的 JavaScript 代碼都是按照從上到下依次執行,不少時候咱們但願代碼按照咱們的意願去執行,好比有選擇性地執行某些代碼,或者重複地執行某些代碼,這就須要使用到流程控制語句。
流程控制語句一共有三種:
1. 流程執行:從上到下,從左到右
2. 選擇執行:分支選擇
3. 循環執行:重複執行
if (條件){ 語句體; }
首先執行條件
若是結果爲true,則執行語句體;
若是結果爲false,則結束if語句。
注意:若語句體只有一條語句,能夠省略大括號,但不建議省略
if (條件){ 語句體1; }else { 語句體2; }
首先執行條件
若是結果爲true,則執行語句體1;
若是結果爲false,則執行語句體2。
if(比較表達式1) { 語句體1; }else if(比較表達式2){ 語句體2; }else if(比較表達式3){ 語句體3; } ... [else { 語句體n+1; }]
多個 if ...else 且值爲定值時(即=== 在比較運行結果時,採用的是嚴格相等運算符(===),而不是相等運算符(==),這意味着比較時不會發生類型轉換。) ,可使用 switch 替換:
switch(表達式) { case 值1: 語句體1; break; case 值2: 語句體2; break; ... default: 語句體n+1; [break;] }
break 防止穿透,若是沒有 break,則繼續執行後面的代碼,直到遇到 break 或所有執行完畢,可是有些時候會利用穿透。
循環結構用於重複執行某個操做 簡單理解就是重複執行同類型的代碼,它有多種形式。
先判斷後執行
基本格式 while(判斷條件語句) { 循環體語句; } 擴展格式: 初始化語句; while(判斷條件語句){ 循環體語句; 控制條件語句; // 少了它很容易造成死循環 }
先執行後判斷,至少執行一次
基本格式 do { 循環體語句; }while(判斷條件語句); 擴展格式: 初始化語句; do { 循環體語句; 控制條件語句; } while(判斷條件語句);
for(初始化語句;判斷條件語句;控制條件語句){ 循環體語句; }
條件永遠成立,永遠爲 true,則會產生死循環,下面是最簡單的死循環
while(true){} for(;;){}
break: 中止本層循環
continue:暫停本次循環,繼續下一次
數組是按次序排列的一組數據,每一個值的位置都有編號(從0開始),整個數組用方括號表示。
JS 中定義數組的三種方式以下(也可先聲明再賦值):
var arr = [值1,值2,值3]; // 隱式建立 var arr = new Array(值1,值2,值3); // 直接實例化 var arr = new Array(size); // 建立數組並指定長度
數組的長度能夠經過length屬性來獲取,並能夠任意更改
數組名.length 數組名.length = 新長度
數組中的每個元素均可以被訪問和修改,甚至是不存在的元素,無所謂越界
數組名[下標] 數組名[下標] = 新值
數組的遍歷即依次訪問數組的每個元素 ,JS提供三種遍歷數組的方式:
for(var i=0; i<=數組.length-1; i++){ } 如: for(var idx=0;idx<arr.length;idx++){ console.log(arr[idx]); }
for(var 下標(名稱任意) in 數組名){ 數組名[下標]是獲取元素 } // 下標(名稱任意) 如: for(var idx in arr){ console.log(arr[idx]); }
數組名.forEach(function(element,index){ // element(名稱任意):元素,index(名稱任意):下標 }) 如: arr.forEach(function(elem,idx){ console.log(idx + "-->" + elem); });
數組在使用的時候建議你們規矩來用。在存放數據時,從下標0開始順序的存放數組元素。 若是下標: 1.爲非負整數(包括整數字符串):自動從0開始,不存在添加 undefined 2.爲負數、小數、非數字符串:這些內容不計算在長度內,當成"屬性"處理,至關於自定義屬性。 數組很是靈活,使用數組元素 1.下標: 非負整數(包括整數字符串): 數組.下標 數組[下標] 2.下標:負數、小數、非數字字符串: 數組[屬性] * for --> 不遍歷屬性 * foreach -->不遍歷屬性和索引中的undefined * for in -->不遍歷索引中的undefined
Array對象爲咱們提供了一些方法,能夠很方便地操做數組
push 添加元素到最後 unshift 添加元素到最前 pop 刪除最後一項 shift 刪除第一項 reverse 數組翻轉 join 數組轉成字符串 indexOf 數組元素索引 slice 截取(切片)數組,原數組不發生變化 splice 剪接數組,原數組變化,能夠實現先後刪除效果 concat 數組合並
var arr = ['1','a',5,'3']; console.log(arr); arr.push(10); console.log(arr); arr.unshift('b'); console.log(arr); arr.pop(); console.log(arr); arr.shift(); console.log(arr); arr.reverse(); console.log(arr); console.log(arr.join('\'')); console.log(arr); console.log(arr.indexOf('a')); console.log(arr.slice(2,5)); console.log(arr); arr.splice(1,1,'一','二'); console.log(arr); var arr1 = [0,'100']; console.log(arr.concat(arr1)); console.log(arr); console.log(arr1); console.log(arr1.(arr));
函數,即方法。就是一段預先設置的功能代碼塊,能夠反覆調用,根據輸入參數的不一樣,返回不一樣的值。<font color="red">函數也是對象。</font>
有三種函數定義的方式:函數聲明語句、函數定義表達式、Function構造函數
function 函數名([參數列表]){ } 例如: function foo(){ console.log(1); } foo();
該種方式定義的函數具備聲明提高的效果
foo(); function foo(){ console.log(1); } // 變量聲明提高 console.log( a ); var a = 2;
以表達式方式定義的函數,函數的名稱是能夠不須要的
var 變量名 = function ([參數列表]) { } 變量名(); 例如: var fun = function(){ console.log("Hello"); } fun();
這種寫法將一個匿名函數賦值給變量。這時,這個匿名函數又稱函數表達式,由於賦值語句的等號右側只能放表達式。
Function構造函數接收任意數量的參數,但最後一個參數始終都被當作是函數體,而前面的參數則列舉出了新函數的參數。
var add = new Function('x','y','return (x + y)'); // 等同於 function add(x, y) { return (x + y); } add();
<font color="red">注意:</font>
1. js中的函數沒有重載,同名的函數,會被後面的函數覆蓋。 2. js中容許有不定數目的參數,後面介紹arguments對象
函數運行的時候,有時須要提供外部數據,不一樣的外部數據會獲得不一樣的結果,這種外部數據就叫參數,定義時的參數稱爲形參,調用時的參數稱爲實參
// 調用函數時,實參能夠省略,則對應形參爲undefined function add(a , b) { console.log(a + "+" + b + "=" + (a + b)); } add(3,4,5)//3+4=7 add(1);//1+undefined=NaN add();//undefined+undefined=NaN // 若函數形參同名(通常不會這麼幹):在使用時以最後一個值爲準 function add2(a , a) { console.log(a); } add2(1,2); // 給參數默認值 function defaultValue(a){ a = a || "a"; return a; } console.log(defaultValue()); function f(a){ //若參數a不爲undefined或null,則取自己的值,不然給一個默認值 (a !== undefined && a !== null) ? a = a : a = 1; return a; } console.log(f()); // 值傳遞 var num = 12; function change(n) { n = 30; } change(num); console.log(num); // 引用傳遞 var obj = {name: "tom"}; function paramter(o) { o.name = 2; } paramter(obj); console.log(obj.name); // 給形參o賦予了新的數組 var obj2 = [1, 2, 3]; function paramter2(o){ o = [2, 3, 4]; o[1] = 3; } paramter2 (obj2); console.log(obj2)
1. 經常使用調用方式
函數名([實參]);
存在返回值能夠變量接收,若接收無返回值函數則爲undefined。
2. 函數調用模式
function add(a,b){ return a+b; } var sum = add(1,2) console.log(sum);
3. 方法調用模式
var o = { m: function(){ console.log(1); } }; o.m();
函數的執行可能會有返回值,須要使用return語句將結果返回。return 語句不是必需的,若是沒有的話,該函數就不返回任何值,或者說返回 undefined。
做用:
1. 在沒有返回值的方法中,用來結束方法。
2. 有返回值的方法中,一個是用來結束方法,一個是將值帶給調用者。
函數做用域:全局 (global variable) 和 局部 (local variable)
1. 全局變量與局部變量同名問題
var box =1; // 全局變量 function display(box){ var box = 3; // 此處box與全局變量box沒有關係,這裏的box爲傳遞的參數,至關於新聲明的局部變量 var b = 2; // 局部變量 console.log("box-->" + box); } display(); // b 不能訪問 console.log("b-->" + b);
2. 在函數中定義變量時,若沒有加var關鍵字,使用以後自動變爲全局變量
function fun(){ a = 100; } fun(); alert(a);
Arguments 只在函數內部定義,保存了函數的實參 Array 數組對象 Date 日期對象,用來建立和獲取日期 Math 數學對象 String 字符串對象,提供對字符串的一系列操做
◦ charAt(idx) 返回指定位置處的字符 ◦ indexOf(Chr) 返回指定子字符串的位置,從左到右。找不到返回-1 ◦ substr(m,n) 返回給定字符串中從m位置開始,取n個字符,若是參數n省略,則意味着取到字符串末尾。 ◦ substring(m,n) 返回給定字符串中從m位置開始,到n位置結束,若是參數n省略,則意味着取到字符串末尾。 ◦ toLowerCase() 將字符串中的字符所有轉化成小寫。 ◦ toUpperCase() 將字符串中的字符所有轉化成大寫。 ◦ length 屬性,不是方法,返回字符串的長度。
◦ Math.random() 隨機數 ◦ Math.ceil() 向上取整,大於最大整數 ◦ Math.floor() 向小取整,小於最小整數String
// 獲取日期 ◦ getFullYear() 年 ◦ getMonth() 月 ◦ getDate() 日 ◦ getHours() 時 ◦ getMinutes() 分 ◦ getSeconds() 秒 // 設置日期 ◦ setYear() ◦ setMonth() ◦ setDate() ◦ setHours() ◦ setMinutes() ◦ setSeconds() ◦ toLoacaleString() 轉換成本地時間字符串
<font color="red">說明:</font>
對象(object)是 JavaScript 的核心概念,也是最重要的數據類型。JavaScript 的全部數據均可以被視爲對象。JavaScript 提供多個內建對象,好比 String、Date、Array 等等。對象是帶有屬性和方法的特殊數據類型。
簡單說,所謂對象,就是一種無序的數據集合,由若干個「鍵值對」(key-value)構成。經過JavaScript咱們能夠建立本身的對象。 JavaScript對象知足的這種」鍵值對」的格式咱們稱爲JSON格式,之後會見得很是多,即偉大的JSON對象。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-cLPLNs2Y-1606962755543)(/圖片1sf.png)]
{鍵:值, 鍵2:值2,...}
JS 建立自定義對象,主要經過三種方式:字面量形式建立對象、經過new Object對象建立 、經過Object對象的create方法建立對象。
var 對象名 = {};//建立一個空的對象 var 對象名 = {鍵:值,鍵2:值2,...} var obj = { 'name' : 'hello', age : 12, sayHello : function () { console.log("我是對象中的方法"); }, courses : { javase : 4, javascript : 3 }, isLike : true, members : [ {name : "小紅",age : 20}, {name : "小綠",age : 22}, {name : "小藍",age : 27}, {name : "小黃"} ] };
var 對象名 = new Object(); // 建立一個空的對象 var obj = new Object(); obj.name = 'zs'; obj.age = 18; console.log(obj);
var 對象名 = Object.create(null); var obj = Object.create(null); obj.name = 'ls'; obj.gender = true console.log(obj); var objn = Object.create(obj); objn.age = 18; console.log(objn); console.log(objn.gender)
序列化即將JS對象序列化爲字符串,反序列化即將字符串反序列化爲JS對象。JS中經過調用JSON方法,能夠將對象序列化成字符串,也能夠將字符串反序列化成對象 。
// 序列化對象,將對象轉爲字符串 JSON.stringify(object);
// 反序列化,將一個Json字符串轉換爲對象。 JSON.parse(jsonStr);
this是JavaScript語言的一個關鍵字。
它表明函數運行時,自動生成的一個內部對象,只能在函數內部使用。
隨着函數使用場合的不一樣,this的值會發生變化。可是有一個總的原則,那就是this指的是,調用函數的那個對象。
在函數中使用this屬於全局性調用,表明全局對象,經過window對象來訪問。
function test () { this.x = 1; console.log(this.x); } test(); console.log(x); // 至關於定義在全局對象上的屬性 var x = 10; console.log(x) // 10 function test (){ console.log(this.x) // 10 this.x = 1; console.log(this.x) // 1 console.log(this) } test(); console.log(x); // 1 console.log(this);
在對象中的函數使用this,表明當前的上級對象。
var obj = { name : '張三', age : 20, sayHello : function () { console.log(this.name) console.log(this) } } obj.sayHello();
ject.create(null);
obj.name = 'ls';
obj.gender = true
console.log(obj);
var objn = Object.create(obj);
objn.age = 18;
console.log(objn);
console.log(objn.gender)
#### 對象的序列化和反序列化 序列化即將JS對象序列化爲字符串,反序列化即將字符串反序列化爲JS對象。JS中經過調用JSON方法,能夠將對象序列化成字符串,也能夠將字符串反序列化成對象 。
// 序列化對象,將對象轉爲字符串
JSON.stringify(object);
// 反序列化,將一個Json字符串轉換爲對象。
JSON.parse(jsonStr);
#### this this是JavaScript語言的一個關鍵字。 它表明函數運行時,自動生成的一個內部對象,只能在函數內部使用。 隨着函數使用場合的不一樣,this的值會發生變化。可是有一個總的原則,那就是this指的是,調用函數的那個對象。 ##### 在函數中使用this 在函數中使用this屬於全局性調用,表明全局對象,經過window對象來訪問。
function test () {
this.x = 1; console.log(this.x);
}
test();
console.log(x); // 至關於定義在全局對象上的屬性
var x = 10;
console.log(x) // 10
function test (){
console.log(this.x) // 10 this.x = 1; console.log(this.x) // 1 console.log(this)
}
test();
console.log(x); // 1
console.log(this);
##### 在對象中使用this 在對象中的函數使用this,表明當前的上級對象。
var obj = {
name : '張三', age : 20, sayHello : function () { console.log(this.name) console.log(this) }
}obj.sayHello();