javascript 入門(2019/5/26)

JavaScript

一、 簡(jiǎn)介

JavaScript
是一種具有面向?qū)ο竽芰Φ?、解釋型的程序設(shè)計(jì)語(yǔ)言。更具體一點(diǎn),它是基于
對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語(yǔ)言。它的主要目的是,驗(yàn)證發(fā)往服務(wù)器端的
數(shù)據(jù)、增加 Web 互動(dòng)、加強(qiáng)用戶體驗(yàn)度等。

image.png

ECMAScript 定義的只是這門語(yǔ)言的基礎(chǔ),與 Web瀏覽器沒(méi)有依賴關(guān)系,而在基礎(chǔ)語(yǔ)法上
可以構(gòu)建更完善的腳本語(yǔ)言。 JavaScript 的運(yùn)行需要一定的環(huán)境,脫離了環(huán)境
JavaScript 代碼\是不能運(yùn)行的,JavaScript 只能夠寄生在某個(gè)具體的環(huán)境中才能夠工作。
JavaScript運(yùn)行環(huán)境一般都由宿主環(huán)境和執(zhí)行期環(huán)境共同構(gòu)成,其中宿主環(huán)境是由外殼程序生成的,如
Web 瀏覽器就是一個(gè)外殼程序,它提供了一個(gè)可控制瀏覽器窗口的宿主環(huán)境。執(zhí)行期環(huán)境則由嵌入到外殼程序中的JavaScript 引擎(或稱為 JavaScript 解釋器)生成,在這個(gè)環(huán)境中 JavaScript能夠生成內(nèi)置靜態(tài)對(duì)象,初始化執(zhí)行環(huán)境等。
Web 瀏覽器自定義的 DOM 組件,以面向?qū)ο蠓绞矫枋龅奈臋n模型。 DOM
定義了表示和修\改文檔所需的對(duì)象、這些對(duì)象的行為和屬性以及這些對(duì)象之間的關(guān)系。 DOM對(duì)象,是我們用傳統(tǒng)的方法(javascript)獲得的對(duì)象。
DOM 屬于瀏覽器,而不是JavaScript 語(yǔ)言規(guī)范里的規(guī)定的核心內(nèi)容。\前面的 DOM
是為了操作瀏覽器中的文檔,而為了控制瀏覽器的行為和操作,瀏覽器還提\供了 BOM(瀏覽器對(duì)象模型)。

ECMAScript(基礎(chǔ)語(yǔ)法**)
JavaScript 的核心語(yǔ)法 ECMAScript 描述了該語(yǔ)言的語(yǔ)法和基本對(duì)象
DOM(文檔對(duì)象模型
)
文檔對(duì)象模型(DOM)
------ 描述了處理網(wǎng)頁(yè)內(nèi)容的方法和接口
BOM(瀏覽器對(duì)象模型
)
**瀏覽器對(duì)象模型(BOM)描述了與瀏覽器進(jìn)行交互的方法和接口
開(kāi)發(fā)工具
1、瀏覽器: chrome
2、開(kāi)發(fā)工具:hbuilder等
3、進(jìn)入"控制臺(tái)" console:F12

控制臺(tái)的作用:
console 對(duì)象代表瀏覽器的 JavaScript 控制臺(tái),用來(lái)運(yùn)行 JavaScript
命令,常常用來(lái)顯示網(wǎng)\頁(yè)運(yùn)行時(shí)候的錯(cuò)誤信息。 Elements 用來(lái)調(diào)試網(wǎng)頁(yè)的 html 和 css 代碼。

二、 JavaScript 基本用法**\

**JS 需要和 HTML 一起使用才有效果,我們可以通過(guò)直接或間接的方式將 JS
代碼嵌入在\HTML 頁(yè)面中。\

  • 行內(nèi) JS : 寫(xiě)在標(biāo)簽內(nèi)部的 js 代碼\
  • 內(nèi)部 JS : 定義在 script 標(biāo)簽內(nèi)部的 js 代碼\
  • 外部 JS : 單獨(dú)的 js 文件,在 HTML 中通過(guò) script 標(biāo)簽引入
    我們可以將 JavaScript 代碼放在 html文件中任何位置,但是我們一般放在網(wǎng)頁(yè)的 head 或
    者 body 部分。
    由于頁(yè)面的加載方式是從上往下依次加載的,而這個(gè)對(duì)我們放置的 js 代碼運(yùn)行
    是有影響的。
    放在<head>部分,最常用的方式是在頁(yè)面中 head部分放置<script>元素,瀏覽器解析
    head 部分就會(huì)執(zhí)行這個(gè)代碼,然后才解析頁(yè)面的其余部分。
    放在<body>部分,JavaScript 代碼在網(wǎng)頁(yè)讀取到該語(yǔ)句的時(shí)候就會(huì)執(zhí)行。

行內(nèi):

<button onclick="alert('you clicked hered!!!')">click here</button>

內(nèi)部:


<script type="text/javascript" charset="utf-8">
alert('this is inner js code')
</script>


外部:
**hello.js

alert('this is a outter js document')

hello.html

<script src="js/hello.js" type="text/javascript" charset="utf-8"></script>

三、 JavaScript 基礎(chǔ)語(yǔ)法

1、 語(yǔ)句和注釋
JavaScript
程序的執(zhí)行單位為行(line),也就是一行一行地執(zhí)行。一般情況下,每一行就\是一個(gè)語(yǔ)句。
語(yǔ)句(statement)是為了完成某種任務(wù)而進(jìn)行的操作,語(yǔ)句以分號(hào)結(jié)尾,一個(gè)分號(hào)即表示\一個(gè)語(yǔ)句結(jié)束。
多個(gè)語(yǔ)句可以寫(xiě)在一行內(nèi)(不建議這么寫(xiě)代碼),但是一行寫(xiě)多條語(yǔ)句時(shí),語(yǔ)\句必須以分號(hào)結(jié)尾。
表達(dá)式不需要分號(hào)結(jié)尾。一旦在表達(dá)式后面添加分號(hào),則 JavaScript
引擎就將表達(dá)式視為\語(yǔ)句,這樣會(huì)產(chǎn)生一些沒(méi)有任何意義的語(yǔ)句。


單行注釋:用//起頭;
多行注釋:放在/* 和 */之間。
兼容 html 注釋方式:


說(shuō)明: 由于歷史上 JavaScript 兼容 HTML 代碼的注釋,所以也使用 HTML
總的注釋作為
JavaScript 中的單行注釋。

標(biāo)識(shí)符

就是一個(gè)名字,用來(lái)給變量和函數(shù)進(jìn)行命名, 有特定規(guī)則和規(guī)范
規(guī)則:

由 Unicode 字母、 _、 $、數(shù)字組成、中文組成
(1)不能以數(shù)字開(kāi)頭
(2) 不能是關(guān)鍵字和保留字
(3)嚴(yán)格區(qū)分大小寫(xiě)

三、 變量\

變量即一個(gè)帶名字的用來(lái)存儲(chǔ)數(shù)據(jù)的內(nèi)存空間,
數(shù)據(jù)可以存儲(chǔ)到變量中,也可以從變量中\(zhòng)取出數(shù)據(jù)。\

1. 變量的聲明\

**JavaScript 是一種弱類型語(yǔ)言,在聲明變量時(shí)不需要指明數(shù)據(jù)類型, 直接用
var 修飾符進(jìn)\行聲明。
變量聲明和賦值:


// 先聲明再賦值
var a ;
a = 10;
// 聲明同時(shí)賦值
var b = 20;


注:如果聲明變量時(shí)不使用var修飾符,則該變量是全局變量

2變量的注意點(diǎn):

1)若只聲明而沒(méi)有賦值,則該變量的值為 undefined

2)變量要有定義才能使用,若變量未聲明就使用,JavaScript
會(huì)報(bào)錯(cuò),告訴你變量未定義

3)可以在同一條 var 命令中聲明多個(gè)變量。

4)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量,是無(wú)效的。

5)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量且賦值,則會(huì)覆蓋掉前面的值

6)JavaScript
是一種動(dòng)態(tài)類型、弱類型語(yǔ)言,也就是說(shuō),變量的類型沒(méi)有限制,可以賦予各種類型的值

3.變量提升

JavaScript
引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運(yùn)行。這造成的結(jié)果,就是所有的變量的聲明語(yǔ)句,都會(huì)被提升到代碼的頭部,這就叫做變量提升。

    <script type="text/javascript">
        /*1、JavaScript是一種弱類型語(yǔ)言,聲明時(shí)不需要指定數(shù)據(jù)類型,直接通過(guò)var修飾符聲明*/
        var a; // 先聲明
        a = 1; // 再賦值
        var b = 2; // 聲明并賦值
        
        console.log(a,b);
        
        console.log("==========變量的注意點(diǎn)==========");
        /*1)若只聲明而沒(méi)有賦值,則該變量的值為 undefined*/
        var str1; // 只聲明
        console.log(str1); // undefined
        
        /*2)變量要有定義才能使用,若變量未聲明就使用,JavaScript 會(huì)報(bào)錯(cuò),告訴你變量未定義*/
        //console.log(str2); // Uncaught ReferenceError: str2 is not defined
        
        /*3)可以在同一條 var 命令中聲明多個(gè)變量。*/
        var aa,bb,cc=1;
        console.log(aa,bb,cc);
        
        /*4)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量,是無(wú)效的。*/
        var a;
        console.log(a);
        
        /*5)若使用 var 重新聲明一個(gè)已經(jīng)存在的變量且賦值,則會(huì)覆蓋掉前面的值*/
        var b = 10;
        console.log(b);
        
        console.log("==========變量提升==========");
        console.log(uname); // js引擎會(huì)將所有通過(guò)var聲明的變量名提升到代碼的頭部
        var uname = "zhangsan";
        console.log(uname);
        
        
        // console.log(userName); // 只有varvar聲明的變量才會(huì)變量提升
        userName = "lisi";
        console.log(userName);
        
        
    </script>


四、 數(shù)據(jù)類型
雖說(shuō) JS 是弱類型語(yǔ)言, 變量沒(méi)有類型, 但數(shù)據(jù)本身是有類型的。
針對(duì)不同的類型,我們可以進(jìn)行不同的操作。
JavaScript 中有 6 種數(shù)據(jù)類型, 其中有五種簡(jiǎn)單的數(shù)據(jù)類型: Undefined、
Null、 布爾、數(shù)值和字符串。一種復(fù)雜數(shù)據(jù)類型 Object。

數(shù) 值(Number) : 整數(shù)和小數(shù)(比如 1 和 3.14)
字符串(String) : 字符組成的文本(比如"Hello World")
布爾值(Boolean) : true(真)和 false(假)兩個(gè)特定值
Undefined: 表示"未定義"或不存在,即此處目前沒(méi)有任何值
Null: 表示空缺,即此處應(yīng)該有一個(gè)值,但目前為空
對(duì)象(object(引用) : 各種值組成的集合
1)、對(duì)象(object) {name:" zhangsan" ,age:" 18" }
2)、數(shù)組(array) [1,2,3]
3)、函數(shù)(function) function test() {}

1. typeof 操作符

typeof 操作符是用來(lái)檢測(cè)數(shù)據(jù)類型。對(duì)于值或變量使用 typeof
操作符會(huì)返回如下字符串:

image.png

說(shuō)明:

1、 typeof null 返回的是 object 字符串
2、函數(shù)不是數(shù)據(jù)類型,但是也可以使用 typeof 操作符返回字符串。
typeof 操作符可以操作變量也可以操作字面量。
注意:函數(shù)在 JavaScript 中是對(duì)象,不是數(shù)據(jù)類型,所以使用 typeof 區(qū)分
function 和
object 是有必要的。

//undefined\
var a;\
//a 的類型是 Undefined,值是 undefined,類型返回的字符串是 undefined\
alert(typeof a);\
//boolean\
var a = true;\
//a 的類型是 Boolean,值是 true,類型返回的字符串是 boolean\
alert(typeof a);\
//string\
var a = \"你好\";\
alert(typeof a);//a 的類型是 String,值是\"你好\",類型返回的字符串是
string\
//number\
var a = 380;\
alert(typeof a);//a 的類型是 Number,值是 380,類型返回的字符串是 number\
//object\
//空的對(duì)象,表示對(duì)象已經(jīng)創(chuàng)建了,但是還沒(méi)有東西\
//空對(duì)象,表示對(duì)象還沒(méi)有創(chuàng)建,就是 null\
var a = {};\
//a 的類型是 Object,值是\[object Object\],類型返回的字符串是 object\
alert(typeof a);\
var a = null;\
//a 的類型是 Null,值是 null,類型返回的字符串是 object

alert(typeof a);\
var a = new Object();\
//a 的類型是 Object,值是\[object Object\],類型返回的字符串是 object\
alert(typeof a);\
function a () {}\
//a 的類型是 Function 函數(shù),值是函數(shù)的代碼 function
a(){},類型返回的字符串是 function\
alert(typeof a);

2.undefined

undefined 類型的值是 undefined。

undefined 是一個(gè)表示"無(wú)"的原始值,表示值不存在。

出現(xiàn) undefined 的常見(jiàn)情況:

1)當(dāng)聲明了一個(gè)變量而沒(méi)有初始化時(shí),這個(gè)變量的值就是undefined

2)當(dāng)函數(shù)需要形參,但未傳遞實(shí)參時(shí)

3)函數(shù)沒(méi)有返回值,但定義了變量接收

    console.log("================undefined===========");
        // 1)當(dāng)聲明了一個(gè)變量而沒(méi)有初始化時(shí),這個(gè)變量的值就是 undefined
        var aa;
        console.log(aa);
        // 2)當(dāng)函數(shù)需要形參,但未傳遞實(shí)參時(shí)
        function tt(num) {
            console.log(num);   
        }
        tt(); // 未傳遞實(shí)參
        // 3)函數(shù)沒(méi)有返回值,但定義了變量接收
        function tt2() {
            console.log("函數(shù)...");
            // return true; 
        }
        tt2();
        var t = tt2(); // 沒(méi)有返回值
        console.log(t);



3. null
**null 類型是只有一個(gè)值的數(shù)據(jù)類型,即特殊的值 null。
它表示空值,即該處的值現(xiàn)在為空,
它表示一個(gè)空對(duì)象引用。
使用 Null 類型值時(shí)注意以下幾點(diǎn):
1)使用 typeof 操作符測(cè)試 null 返回 object 字符串。
2) undefined 派生自 null,所以等值比較返回值是
true。所以,未初始化的變量和賦值為
null 的變量相等。

console.log("=================null==================");
        // 1)使用 typeof 操作符測(cè)試 null 返回 object 字符串。
        // 2)undefined 派生自 null,所以等值比較返回值是 true。所以,未初始化的變量和賦值為 null 的變量相等
    
        // undefined 派生自 null
        console.log(undefined == null); // true
        var ab; // 只聲明未賦值返回undefined
        console.log(ab == null); // true



4. 數(shù)值型
數(shù)值型包含兩種數(shù)值:整型和浮點(diǎn)型。
1) 所有數(shù)字(整型和浮點(diǎn)型)都是以 64 位浮點(diǎn)數(shù)形式儲(chǔ)存。所以, JS 中 1
與 1.0 相等,
而且 1 加上 1.0 得到的還是一個(gè)整數(shù)。 浮點(diǎn)數(shù)最高精度是 17
位小數(shù),由于浮點(diǎn)數(shù)運(yùn)算時(shí)可能不精確,盡量不要使用浮點(diǎn)數(shù)做判斷。
2)在存儲(chǔ)數(shù)值型數(shù)據(jù)時(shí)自動(dòng)將可以轉(zhuǎn)換為整型的浮點(diǎn)數(shù)值轉(zhuǎn)為整型。
3)對(duì)于過(guò)大或過(guò)小的數(shù)值,可以使用科學(xué)計(jì)數(shù)法來(lái)表示

4)Infinity、-Infinity

超過(guò)了表數(shù)范圍,出現(xiàn) Infinity(正無(wú)窮)或者-Infinity(負(fù)無(wú)窮)

isFinite()函數(shù)可以確定是否超出范圍:

true:沒(méi)有超出;false:超出了

console.log("======================數(shù)值型=================");
        // 浮動(dòng)性自動(dòng)轉(zhuǎn)整型
        console.log(1 + 2.0); // 3      
        var n = 5.0;
        console.log(n); // 5
        
        // 數(shù)值過(guò)大或過(guò)小會(huì)使用科學(xué)計(jì)數(shù)法顯示
        var num2 = 4.12e9;
        console.log(num2);//4120000000
        console.log(0.0000000412);//4.12e-8
        
        // 正無(wú)窮和負(fù)無(wú)窮
        console.log(100e1000);//Infinity
        console.log(-100e1000);//-Infinity
        console.log(1 / -0 );// 除以負(fù) 0 得到-Infinity
        console.log(1 / +0); // 除以 0 得到 Infinit
        
        // isFinite()
        console.log(isFinite(1)); //true
        console.log(isFinite(100e1000)); //fasle
        


5.NaN

表示非數(shù)值(Not a Number),是一個(gè)特殊的值。

如:將字符串解析成數(shù)字出錯(cuò)的場(chǎng)合。

console.log(parseInt("abc"));//parseInt
方法將字符串解析為數(shù)值,但若無(wú)法解析,返回 NaN

注意:

NaN 不等于任何值,包括它本身,因?yàn)樗皇且粋€(gè)值

NaN 與任何數(shù)(包括它自己)的運(yùn)算,得到的都是 NaN

isNaN()可以用來(lái)判斷一個(gè)值是否為 NaN

true:不是數(shù)字;false:是數(shù)字

// NaN
        console.log(parseInt("123")); // 123
        console.log(parseInt("abc")); // NaN
        console.log(NaN == NaN); // false
        console.log(parseInt("abc") + 1); // NaN
        
        // isNaN()可以用來(lái)判斷一個(gè)值是否為 NaN
        console.log(isNaN(parseInt("123"))); // false
        console.log(isNaN(parseInt("abc"))); // true



6. 字符串
使用 ' ' 或 " "引起來(lái),如: 'sxt', "good"。
使用加號(hào)'+'進(jìn)行字符串的拼接,如: console.log('hello' + '
everybody');

7. 對(duì)象
對(duì)象是一組數(shù)據(jù)和功能的集合。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
說(shuō)明:
{}:表示使用對(duì)象字面量方式定義的對(duì)象??盏拇罄ㄌ?hào)表示定義包含默認(rèn)屬性和方法的對(duì)
象。

instanceof 運(yùn)算符
typeof 操作符對(duì)數(shù)組(array)和對(duì)象(object)的顯示結(jié)果都是
object,那么可以利用
instanceof 運(yùn)算符,它可用于判斷一個(gè)變量是否某個(gè)對(duì)象的實(shí)例。

console.log("===============對(duì)象====================");
        // instanceof 運(yùn)算符
        var o = {};
        var ar = [];
        
        console.log(o instanceof Object); // true
        console.log(ar instanceof Array); // true
         

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容