主要內容
JavaScript
簡介
JavaScript 是一種具備面向對象能力的、解釋型的程序設計語言。更具體一點,它是基於對象和事件驅動並具備相對安全性的客戶端腳本語言。它的主要目的是,驗證發往服務器端的數據、增長 Web 互動、增強用戶體驗度等。javascript
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
開發工具
瀏覽器:Chrome
開發工具:Hbuilder X
進入瀏覽器控制檯 Console:F12
控制檯的做用:
console對象表明瀏覽器的JavaScript控制檯,用來運行JavaScript命令,經常用來顯示網頁運行時候的錯誤信息。Elements用來調試網頁的html和css代碼。
基本用法
JS須要和HTML一塊兒使用纔有效果,咱們能夠經過直接或間接的方式將JS代碼嵌入在HTML頁面中。
行內JS : 寫在標籤內部的js代碼
內部JS : 定義在script標籤內部的js代碼
外部JS : 單獨的js文件,在HTML中經過script標籤引入
咱們能夠將JavaScript代碼放在html文件中任何位置,可是咱們通常放在網頁的head或者body部分。因爲頁面的加載方式是從上往下依次加載的,而這個對咱們放置的js代碼運行是有影響的。
放在部分,最經常使用的方式是在頁面中head部分放置
放在部分,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基礎語法
語句和註釋
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 是一個表示"無"的原始值,表示值不存在。
出現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。它表示空值,即該處的值如今爲空,它表示一個空對象引用。
使用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’);
對象
對象是一組數據和功能的集合。
說明:
{}:表示使用對象字面量方式定義的對象。空的大括號表示定義包含默認屬性和方法的對象。
類型轉換
自動類型轉換
函數轉換(String to Number)
JS 提供了 parseInt()和 parseFloat()兩個全局轉換函數。前者把值轉換成整數,後者把值轉換成浮點數。只有對 String 類型調用這些方法,這兩個函數才能正確運行;對其餘類型返回的都是 NaN(Not a Number)。
parseInt()
在轉換以前,首先會分析該字符串,判斷位置爲0處的字符,判斷它是不是個有效數字,若是不是,則直接返回NaN,再也不繼續,若是是則繼續,直到找到非字符
parseInt("1234blue"); // returns 1234
parseInt("22.5"); // returns 22
parseInt("blue"); // returns NaN
parseFloat()
該方法與 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>8 爲 false
< 小於 x<8 爲 true
= 大於或等於 x>=8 爲 false
<= 小於或等於 x<=8 爲 true
邏輯運算符
運算符 描述 例子
&& and (x < 10 && y > 1) 爲 true
|| or (x5 || y5) 爲 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;
}]
switch結構
多個 if …else 且值爲定值時(即=== 在比較運行結果時,採用的是嚴格相等運算符(=),而不是相等運算符(),這意味着比較時不會發生類型轉換。) ,可使用 switch 替換:
switch(表達式) {
case 值1:
語句體1;
break;
case 值2:
語句體2;
break;
...
default:
語句體n+1;
[break;]
}
break 防止穿透,若是沒有 break,則繼續執行後面的代碼,直到遇到 break 或所有執行完畢,可是有些時候會利用穿透。
循環
循環結構用於重複執行某個操做 簡單理解就是重複執行同類型的代碼,它有多種形式。
while
先判斷後執行
基本格式
while(判斷條件語句) {
循環體語句;
}
擴展格式:
初始化語句;
while(判斷條件語句){
循環體語句;
控制條件語句; // 少了它很容易造成死循環
}
do…while
先執行後判斷,至少執行一次
基本格式
do {
循環體語句;
}while(判斷條件語句);
擴展格式:
初始化語句;
do {
循環體語句;
控制條件語句;
} while(判斷條件語句);
for
for(初始化語句;判斷條件語句;控制條件語句){
循環體語句;
}
死循環
條件永遠成立,永遠爲 true,則會產生死循環,下面是最簡單的死循環
while(true){}
for(;;){}
break 與 continue
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循環遍歷
for(var i=0; i<=數組.length-1; i++){
}
如:
for(var idx=0;idx<arr.length;idx++){
console.log(arr[idx]);
}
for … in
for(var 下標(名稱任意) in 數組名){
數組名[下標]是獲取元素
} // 下標(名稱任意)
如:
for(var idx in arr){
console.log(arr[idx]);
}
forEach
數組名.forEach(function(element,index){
// element(名稱任意):元素,index(名稱任意):下標
})
如:
arr.forEach(function(elem,idx){
console.log(idx + "-->" + elem);
});
瞭解
數組在使用的時候建議你們規矩來用。在存放數據時,從下標0開始順序的存放數組元素。
若是下標:
1.爲非負整數(包括整數字符串):自動從0開始,不存在添加 undefined
2.爲負數、小數、非數字符串:這些內容不計算在長度內,當成"屬性"處理,至關於自定義屬性。
數組很是靈活,使用數組元素
1.下標: 非負整數(包括整數字符串):
數組.下標
數組[下標]
2.下標:負數、小數、非數字字符串:
數組[屬性]
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));
函數
函數,即方法。就是一段預先設置的功能代碼塊,能夠反覆調用,根據輸入參數的不一樣,返回不一樣的值。函數也是對象。
函數的定義
有三種函數定義的方式:函數聲明語句、函數定義表達式、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構造函數
Function構造函數接收任意數量的參數,但最後一個參數始終都被當作是函數體,而前面的參數則列舉出了新函數的參數。
var add = new Function('x','y','return (x + y)');
// 等同於
function add(x, y) {
return (x + y);
}
add();
注意:
實參能夠省略,那麼對應形參爲undefined
若函數形參同名(通常不會這麼幹):在使用時以最後一個值爲準。
能夠給參數默認值:當參數爲特殊值時,能夠賦予默認值。
參數爲值傳遞,傳遞副本 ;引用傳遞時傳遞地址,操做的是同一個對象。
// 調用函數時,實參能夠省略,則對應形參爲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)
函數的調用
函數名([實參]);
存在返回值能夠變量接收,若接收無返回值函數則爲undefined。
function add(a,b){
return a+b;
}
var sum = add(1,2)
console.log(sum);
var o = {
m: function(){
console.log(1);
}
};
o.m();
return
函數的執行可能會有返回值,須要使用return語句將結果返回。return 語句不是必需的,若是沒有的話,該函數就不返回任何值,或者說返回 undefined。
做用:
1. 在沒有返回值的方法中,用來結束方法。
2. 有返回值的方法中,一個是用來結束方法,一個是將值帶給調用者。
函數的做用域
函數做用域:全局 (global variable) 和 局部 (local variable)
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);
function fun(){
a = 100;
}
fun();
alert(a);
內置對象
Arguments 只在函數內部定義,保存了函數的實參
Array 數組對象
Date 日期對象,用來建立和獲取日期
Math 數學對象
String 字符串對象,提供對字符串的一系列操做
String
◦ charAt(idx) 返回指定位置處的字符
◦ indexOf(Chr) 返回指定子字符串的位置,從左到右。找不到返回-1
◦ substr(m,n) 返回給定字符串中從m位置開始,取n個字符,若是參數n省略,則意味着取到字符串末尾。
◦ substring(m,n) 返回給定字符串中從m位置開始,到n位置結束,若是參數n省略,則意味着取到字符串末尾。
◦ toLowerCase() 將字符串中的字符所有轉化成小寫。
◦ toUpperCase() 將字符串中的字符所有轉化成大寫。
◦ length 屬性,不是方法,返回字符串的長度。
Math
◦ Math.random() 隨機數
◦ Math.ceil() 向上取整,大於最大整數
◦ Math.floor() 向小取整,小於最小整數String
Date
// 獲取日期
◦ getFullYear() 年
◦ getMonth() 月
◦ getDate() 日
◦ getHours() 時
◦ getMinutes() 分
◦ getSeconds() 秒
// 設置日期
◦ setYear()
◦ setMonth()
◦ setDate()
◦ setHours()
◦ setMinutes()
◦ setSeconds()
◦ toLoacaleString() 轉換成本地時間字符串
說明:
getMonth():獲得的值:011(1月12月)
setMonth():設置值時0~11
toLocaleString():可根據本地時間把 Date 對象轉換爲字符串,並返回結果。
對象
對象(object)是 JavaScript 的核心概念,也是最重要的數據類型。JavaScript 的全部數據均可以被視爲對象。JavaScript 提供多個內建對象,好比 String、Date、Array 等等。對象是帶有屬性和方法的特殊數據類型。
簡單說,所謂對象,就是一種無序的數據集合,由若干個「鍵值對」(key-value)構成。經過JavaScript咱們能夠建立本身的對象。 JavaScript對象知足的這種」鍵值對」的格式咱們稱爲JSON格式,之後會見得很是多,即偉大的JSON對象。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HUCJBZWm-1608795646989)(/圖片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 : "小黃"}
]
};
經過new Object建立
var 對象名 = new Object(); // 建立一個空的對象
var obj = new Object();
obj.name = 'zs';
obj.age = 18;
console.log(obj);
經過Object對象的create方法建立
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
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(); ![]