樂字節最新JavaScript基礎語法大全

JavaScript基礎語法

主要內容

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

開發工具
  1. 瀏覽器:Chrome
  2. 開發工具:Hbuilder X
  3. 進入瀏覽器控制檯 Console:F12

    控制檯的做用:

    ​ 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基礎語法

語句和註釋

​ 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 種數據類型,其中有五種簡單的數據類型:UndefinedNull布爾數值字符串。一種複雜數據類型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');

對象

​ 對象是一組數據和功能的集合。

​ 說明:

​ {}:表示使用對象字面量方式定義的對象。空的大括號表示定義包含默認屬性和方法的對象。

類型轉換

自動類型轉換

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2iODTFgL-1606962755534)(/圖片1sdfgh.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-d5deSJgO-1606962755538)(/圖片1gh.png)]

函數轉換(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=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;
}]
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.下標:負數、小數、非數字字符串:
        數組[屬性]

* 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構造函數

​ 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對象
函數的參數、調用和return語句
參數

​ 函數運行的時候,有時須要提供外部數據,不一樣的外部數據會獲得不一樣的結果,這種外部數據就叫參數,定義時的參數稱爲形參,調用時的參數稱爲實參

  • 實參能夠省略,那麼對應形參爲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)
函數的調用

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語句將結果返回。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             字符串對象,提供對字符串的一系列操做
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()    轉換成本地時間字符串

<font color="red">說明:</font>

  1. getMonth():獲得的值:0~11(1月~12月)
  2. setMonth():設置值時0~11
  3. toLocaleString():可根據本地時間把 Date 對象轉換爲字符串,並返回結果。

對象

​ 對象(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 : "小黃"}
           ]
};
經過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();

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();

相關文章
相關標籤/搜索