日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JS详细入门教程(上)

發布時間:2025/7/14 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS详细入门教程(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,我們看一下DOM級別和兼容性:

之前好像在某本上看到說DOM有0級,實際上,DOM0級標準是不存在的。DOM有1、2、3三個級別。DOM1級由兩個模塊組成(DOM Core和DOM HTML),其中,DOM核心規定的是如何映射基于XML的文檔結構,以便簡化對文檔中任意部分的訪問和操作。DOM HTML模塊則在DOM核心的基礎上加以擴展,添加了針對HTML的對象和方法。DOM2級在原來DOM的基礎上又擴充了視圖和用戶界面事件、范圍、遍歷(迭代DOM文檔的方法)等細分模塊,而且通過對象接口增加了對CSS(Cascading Style Sheets,層疊樣式表)的支持。DOM3級則進一步擴展了DOM,引入了以統一方式加載和保存文檔的方法–在DOM加載和保存(DOM Load and Save)模塊中定義;新增了驗證文檔的方法–在DOM驗證(DOM Validation)模塊中定義。

一、六種數據類型

Javascript是一種弱數據類型,這種弱數據類型有什么特征呢?看看下面的例子:

JavaScript一共有6種數據類型,其中五種原始類型(基本類型),一種對象類型(引用類型)。

引用類型:

object,包括Object類型、Array類型、Date類型、RegExp類型、Function類型。

基本類型:

number、string、boolean、null、undefined。

類型的轉換和檢測:

(1)隱式轉換:巧用+、-、==規則轉換類型

num-0 這樣可以將字符串轉化為數字

?例如:“17”-7 ? ? //10

num+ " " ?這樣可以將數字轉換為字符串

例如:“17”+7 ? ? ?//177

類型相同,用===檢測是否相等,類型不同,嘗試類型轉換和比較,部分規則為:

null==undefined ? 相等

number==string 轉number

boolean==?轉number

object==number|string 嘗試對象轉為基本類型

其他:false

例如:
注意:===是絕對等的意思,只有類型和數值都相等才會成立。


更多:


(2)類型檢測

檢測方法:typeof、instanceof、Object.prototype.toString、constructor、duck type

typeof和instanceof比較常用,其中typeof比較適合函數對象和基本類型的判斷,instanceof常用于判斷對象類型,其判斷專責是基于原型鏈判斷的。例如:

?

typeof 100 ? //"number"

typeof ture ? //"boolean"

typeof(undefined) ?//"undefined"

typeof new Object() ?//"object"

typeof [1,2] ?//"object"

typeof NAN ? //"undefined"

?

typeof function ?//“function”

typeof null //"object"

備注:歷史上曾經把null類型===''null'',但是造成許多網站沒有辦法正常訪問,后來就決定null返回的是Object對象。所以typeof null==="object" ?//true

注意:不同window或iframe間的對象類型檢測不能使用instanceof!

更多:

?

?

二、表達式和運算符

表達式類型:原始表達式、初始化表達式、函數表達式、屬性訪問表達式、調用表達式、對象創建表達式。

初始化表達式:new Array(1,2)、[1,2]等

屬性訪問表達式:var o={x:1}; o.x;o['x]

調用表達式:func()

對象創建表達式:new Object;

運算符:逗號“,”、delet、in、new、this

逗號用法:a,b?

如:var val=(1,2,3)

delet用法: ?delet obj.x

如:var obj={x:1};

? ? ? ?obj.x; ? //1

? ? ? ?delet obj.x

? ? ? ?obj.x; ? //undefined

注意:從IE9開始,新增的configurable標簽,當這個的值為true的元素才可以被delet。創建對象時,屬性默認的configurable的值是true。

in的用法:window.x=1;

? ? ? ? ? ? ? ? ?'x' in window; ? ? //true

更多:

?

三、語句

語句分別有:block、var、try catch、function、for...in、with

?

注意:js中沒有塊級作用域。所以在for循環中定義的變量的作用域會被擴大。即在for循環之后仍然可以訪問for循環里面定義的變量。

try catch:

function:

函數聲明:

fd(); ?//true

function fd(){...}

函數表達式:

var fe=function(){...}

注意:函數聲明會在執行之前生效,所以在函數之前調用該函數也可以。但是函數表達式不會在執行之前生效,所以不能提前。

for...in:

var p;

var obj={x:1,y:2}

for(p in obj){....}

注意:

for...in的遍歷順序是不確定的,只是會把該遍歷的每一個元素都遍歷輸出,但是不一定按照定義時候的順序。而且,當enumerable為false時,不能用for...in遍歷。另外,for...in遍歷對象屬性時受原型鏈影響。

嚴格模式:

?

嚴格模式是一種特殊的運行模式,它修復了部分語言上的不足,提供更安強的錯誤檢查,并增強安全性。嚴格模式是向上兼容的。

嚴格模式和普通模式的區別:

①不允許使用with,若使用會報錯(語法錯誤)

②不允許未聲明的變量被賦值

③arguments變為參數的靜態副本

④delete參數、函數名報錯
⑤delete不可配置的屬性也會報錯

⑥對象字面重復屬性名報錯

⑦禁止八進制字面量

⑧eval、arguments變為關鍵字,不能作為變量、函數名

四、對象

對象中包含一系列屬性,這些屬性是無序的。每一個屬性都有一個字符串key和對應的value。

數據屬性:configurable、enumerable、writable、value

訪問器屬性:configurable、enumerable、get、set,訪問器屬性不能直接定義,必須使用Object。definedProperty()來定義。

創建對象

?

第一種是使用new操作符后跟Object構造函數

如下所示:?

var person = new Object(); person.name = "Nicholas"; person.age = 29;?

這種方法要注意原型鏈的問題:

特別注意,并不是所有的對象都會繼承object:

另一種方式是使用對象字面量表示法。

var person = { name : "Nicholas", age : 29 }; ??

另外,使用對象字面量語法時,如果留空其花括號,則可以定義只包含默認屬性和方法的對象,如:

?var person = {}; //與 new Object()相同?

person.name = "Nicholas"; person.age = 29;?

屬性操作

屬性操作包括:讀寫對象屬性、屬性異常、刪除屬性、檢測屬性、枚舉屬性

屬性異常:


刪除屬性:

?

檢測屬性:

用hasOwnProperty()方法來判斷某個對象是否有某個屬性,用propertyIsEnumerable()方法判斷某個屬性是否可以枚舉。

extensible標簽:

設計模式

①工廠模式

?

function createPerson(name, age, job){?

? ? ?var o = new Object();?

? ? ?o.name = name;?

? ? ?o.age = age;?

? ? ?o.job = job;?

? ? ?o.sayName = function(){?

? ? ? ? ? ? ? alert(this.name);?

? ? ? };?

? ? ?return o;

?}?

var person1 = createPerson("winty", 29, "Software Engineer");?

var person2 = createPerson("LuckyWinty", 27, "Student");?

②構造函數模式

function Person(name, age, job){?

? ? ? ? this.name = name;?

? ? ? ? this.age = age;?

? ? ? ? this.job = job;?

? ? ? ? this.sayName = function(){?

? ? ? ? ? ? ? ? ? ? alert(this.name);?

? ? ? ? ?};?

?}?

var person1 = new Person("Winty", 29, "Software Engineer");?

var person2 = new Person("LuckyWinty", 27, "Student");?

③原型模式

function Person(){ }?

Person.prototype.name = "Winty";?

Person.prototype.age = 29;?

Person.prototype.job = "Software Engineer";?

Person.prototype.sayName = function(){?

? ? ? ? alert(this.name);?

? ? ? ? };?

var person1 = new Person();?

person1.sayName(); //"Winty"?

var person2 = new Person();?

person2.sayName(); //"Winty"?

alert(person1.sayName == person2.sayName); //true?

④組合使用構造函數模式和原型模式

?

function Person(name, age, job){?

? ? ? ? ? ? ? this.name = name;?

? ? ? ? ? ? ? this.age = age;?

? ? ? ? ? ? ? this.job = job;?

? ? ? ? ? ? ? this.friends = ["Shelby", "Court"];?

}?

Person.prototype = {?

? ? ? ? ? ? constructor : Person,?

? ? ? ? ? ? sayName : function(){?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alert(this.name);?

? ? ? ? ? ? }?

}?

var person1 = new Person("winty", 29, "Software Engineer");?

var person2 = new Person("LuckyWinty", 27, "Student");?

person1.friends.push("Van");?

alert(person1.friends); //"Shelby,Count,Van"?

alert(person2.friends); //"Shelby,Count"?

alert(person1.friends === person2.friends); //false?

alert(person1.sayName === person2.sayName); //true?

⑤動態原型模式

function Person(name, age, job){?

? ? ? ? ? ? ? this.name = name;?

? ? ? ? ? ? ? this.age = age;?

? ? ? ? ? ? ? this.job = job;?

? ? ? ? ? ? ? if (typeof this.sayName != "function"){?

? ? ? ? ? ? ? ?Person.prototype.sayName = function(){?

? ? ? ? ? ? ? ? ? ? ? ? ? ? alert(this.name);?

? ? ? ? ? ? ? ?};

? ? ? ? ? ? ?}?

}?

var friend = new Person("Winty", 29, "Software Engineer");?

friend.sayName();?

⑥:寄生構造函數模式

function Person(name, age, job){?

? ? ? ? ?var o = new Object();?

? ? ? ? ?o.name = name;?

? ? ? ? ?o.age = age;?

? ? ? ? ?o.job = job;?

? ? ? ? ?o.sayName = function(){?

? ? ? ? ? ? ? ? ? alert(this.name);

? ? ? ? ?};?

? ? ?return o;?

}?

var friend = new Person("Winty", 29, "Software Engineer");?

friend.sayName(); //"Winty"?

⑦穩妥構造函數模式

所謂穩妥對象,指的是沒有公共屬性,而且其方法也不引用this的對象。穩妥對象最適合在一些安全的環境中(這些環境中會禁止使用this和new),或者在防止數據被其他應用程序(如Mashup程序)改動時使用。穩妥構造函數遵循與寄生構造函數類似的模式,但有兩點不同:一是新創建對象的實例方法不引用this;二是不使用new操作符調用構造函數。按照穩妥構造函數的要求,可以將前面的Person構造函數重寫如下。?

function Person(name, age, job){

?var o = new Object();?

?o.sayName = function(){?

? ? alert(name);?

?};?

?return o;?

}

----未完待續

歡迎關注我的個人微信訂閱號:前端生活

轉載請注明出處!

轉載于:https://www.cnblogs.com/LuckyWinty/p/LuckyWinty.html

總結

以上是生活随笔為你收集整理的JS详细入门教程(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。