javascript門道之標準庫

目錄:

1.什么是標準庫

2.Object對象及其實例

3.Number對象及其實例

4.string對象及其對象

5.boolean對象及其實例

6.array對象及其實例

7.math對象及其實例

8.date對象及其實例

9.標準庫總結

1.什么是標準庫:

標準庫就是js的標準內置對象,是js這門語言本身初始時提供的在全局范圍的對象

2.Object對象及其實例

js原生提供一個Object對象,所有的其他對象均繼承自這個對象

Object對象的屬性和方法:

利用console.dir(Object)查找Object對象的屬性和方法

常用的屬性或方法簡介:

1.prototype對象

prototype時候Obejct對象下的原型對象,

原型對象里面放置其他繼承自Obejct對象的屬性和方法:

prototype:Object

constructor:Object()

hasOwnProperty:hasOwnProperty()

isPrototypeOf:isPrototypeOf()

propertyIsEnumerable:propertyIsEnumerable()

toLocaleString:toLocaleString()

toString:toString()

valueOf:valueOf()

get __proto__:get __proto__()

set __proto__:set __proto__()

2.Obejct.keys(obejct)

Object.keys(a);
["0", "1", "2", "3"]

keys()方法輸入一個實例對象并返回對象的屬性數組----keys方法只返回可枚舉的屬性,

3.Object.getOwnPropertyNames(a)

Object.getOwnPropertyNames(a);
["0", "1", "2", "3", "length"];---->返回的不可枚舉的屬性

4.Object()本身作為方法使用也是一個構造函數,可以Object構造函數構造對象實例---使用內置對象和字面量(優點:)

var person=new Object();

person.name='dddd';

var a={name:'ted'};
undefined
Object(a)
Object {name: "ted"}

js關于字面量與構造函數創建對象的幾點理解

1.js中沒有所謂的空對象,即使{}也具有Obejct.prototype繼承的方法和屬性

2.創建的對象的兩種等價的方:

(1)字面量創建對象:

? var a={name:'dddd'};

(2)使用內置構造函數創建對象:

var b=new Object()

b.name='dddd';

推薦字面量創建對象的優點:

1.選擇字面量法創建對象強調該對象盡是一個可變的hash映射,而不是從一個對象中提取屬性和方法

2.對使用內置構造函數創建函數相比,字面量對象沒有作用解析!因為可能以同樣的名字創建一個局部函數,解釋器需要從調用Object(0的位置開始一直向上查詢作用域鏈,知道發現全局Object構造函數。

3.構造函數Object可以僅接受一個參數,并且還依賴傳遞的值,該Obect()可能會委派另一個內置函數來創建對象,并且返回了一個并非期望的不同對象

構造函數仍然是函數,但是他需要用new調用,若忘記用new操作符會導致構造函數中this指向全局函數(window);

function foo(){
?this.name='dddd';
?}
?//定義一個對象
?var b=new foo();
?alert(typeof b);//object
alert(b.name);//dddd;
var b=foo();
alert(typeof b);//window
alert(window.name)//dddd

Object對象有不少方法部署在Object.prototype對象上,所有的Object的對象實例都繼承這些方法

1.Object.prototype.valueOf();

valueOf()---返回一個對象的值--主要用途是js自動類型轉換時會默認調用這個方法

var o={name:'dddd'}; o.valueOf();
Object {name: "dddd"}
var b=1; b.valueOf();
1
var c='ff'; c.valueOf()
"ff"

2.Obejtc.prototype.toString();

toString()方法返回一個對象的字符串形式:

var d={name:'dgg'}; d.toString()
"[object Object]"
var v=1; v.toString()
"1"
var offff=true; offff.toString()
"true"

【注意】 toString()方法就是js自動類型轉換時會默認調用這方法

3.hasOwnProperty();

var a={name:'ddd',age:12}; a.hasOwnProperty(age);--->屬性是字符串不是變量一定要記得加雙引號//false;
var a={name:'ddd',age:12}; a.hasOwnProperty('age');
true

4.propertysEnumerable();判斷某個屬性是否可枚舉(遍歷);

var arr=[1,3,5];? for(var key in arr){ console.log(arr[key])}
1
?3
5
undefined

arr.propertyIsEnumerable('0')
true
arr.propertyIsEnumerable
propertyIsEnumerable() { [native code] }
arr.propertyIsEnumerable('length')
false

for和for--in區別

for--in語句用于對數組或對象的屬性進行循環操作,每次循環中的代碼沒執行一次,就會對數組的元素或對象的屬性進行一次 的用途:用在非數組對象的遍歷,使用for--in進行循環也被稱作為了‘’枚舉

for(var key in 對象){ 執行代碼}

【注意】

1.for--in不會按照屬性的下標來排列輸出

var d={a:'ddd',age:22,v:'ddgg',f:'ddgty'}
for(var key in d){
? console.log(d[key])};

ddd

22

ddgg

ddgty

建議不要對數組執行for in循環,事實上,在高性能javascript這本書中,也強調了for in循環的不好,因為它總是會訪問該對象的原型,看下原型上是否有屬性,這在無意中就給遍歷增加了額外的壓力。

解決方法:

對象自身有自己的屬性:Object.prototype.hasOwnProperty(name)--->true;

這個對象是從他的原型上繼承的,返回的結果是false.通過hasOwnProrerty()限定for--in循環在當前中遍歷,而不是考慮他的原型上屬性

js中遍歷數組的有兩種方式:

for--遍歷出是表示是數組的下標

for--in

3Number對象及其實例

num對象是數值對應的包裝對象:

var num=123;

var num=new Number(123)---包裝對象

屬性:

Number.MAX_VALUE Number.MIN_VALUE Number.POSITIVE_INFINITY Number.NEGATIVE_INFINITY Number.NaN

【注意】:Number對象實例是無法獲取去Number對象的屬性

var a=1;
undefined
a.MAX_VALUE
undefined

2.Number對象的方法

1.Number()自身的方法--將任何類型轉換成數值

Number(1)
1
Number('ddd')
NaN
Number('100ee')
NaN
Number(true)
1
Number(false)
0
Number([])
0
Number({})
NaN

把數字轉換為字符串,并保留幾小數

var c=134; c.toFixed(2)
"134.00"
c.toFixed(4)
"134.0000"

把對象的值轉換為科學計數法的字符串

var a=1233;
a.toExponential(1)
"1.2e+3"
a.toExponential(3)
"1.233e+3"
a.toExponential(2)
"1.23e+3"

Number.isNaN(NaN)
true

【注】
Number對象實例所運用到的屬性和方法基本包含在Number對象的屬性和方法中

4.String對象及其實例

String對象是字符串的包裝對象。利用String構造函數創建一個String對象

String對象的屬性和方法

1.length屬性---返回是一個字符串的長度

var d='dddd'' ; d.length//4;

2.SString(1)
"1"
String({})
"[object Object]"
String([])
""
String(true)
"true"
String(false)
"false"
String(NaN)
"NaN"

String()本身作為方法--能夠把其他類型轉換成字符串

2.String的方法

2.charAt() 返回指定位置的字符

var str = "123" str.charAt(2)//"3"

3..charCodeAt() 返回在指定的位置的字符的 Unicode 編碼 str.charCodeAt(0)//49

4.indextOf() 返回字符所在的位置 str.indexOf(1)//0

5substring() 提取字符串中兩個指定的索引號之間的字符 var str = "NBA Basketball " str.substring(1,3)//"BA" str.substring(1,5)//"BA B"

.6.toUpperCase()&toLowerCase() var str ="hello" str.toUpperCase()//"HELLO" var strr = "HELLO" strr.toLowerCase()//"hello"

7.trim() 刪除空格 var s = " str" s//" str" s.trim()//"str"

8.split() 把字符串分割為字符串數組 var s = "hello" s.split("")//["h", "e", "l", "l", "o"] var str = "hello world" str.split(" ")//["hello", "world"]

9.slice(1,5) 從下標為1開始(包含元素)至下標5(不包含) var str = "helloworld" str.slice(1,5)//"ello" 10.valueOf()&toString() 都是返回字符串

【注】
String對象實例的屬性和方法基本包含在String對象的屬性與方法中

4.Boolean對象及其實例Boolean對象是布爾值的包裝對象,利用Boolean構造函數創建一個布爾對象
var a = true;
typeof a//"boolean"
var b = new Boolean (true)
typeof b//"object"

6.Array對象--數組的包裝對象

屬性:length--數組的長度

方法:

1.valueOf & toStrng() valueOf返回數組對象原始值 toString()返回字符串

var arr = [1,2,3] arr.valueOf()//[1, 2, 3] arr.toString()//"1,2,3"

2.增加數組元素 arr.push() & arr.unshift()//一個在尾部一個在首部增加元素,并返回新數組的長度 arr.push("h","e","e")//6 arr//[1, 2, 3, "h", "e", "e"] arr.unshift(1,1,1)//9 arr//[1, 1, 1, 1, 2, 3, "h", "e", "e"]

3.刪除數組元素 arr.pop() & arr.shift()//一個在尾部一個在首部刪除元素,并返回刪除的元素,每次調用只能刪一個

var arr = [1, 1, 1, 1, 2, 3, "h", "e", "e"] arr.pop()//"e" arr//[1, 1, 1, 1, 2, 3, "h", "e"] arr.shift()//1 arr//[1, 1, 1, 2, 3, "h", "e"]

4.靈活刪除增添元素的方法

var arr = [1, 1, 1, 1, 2, 3, "h", "e", "e"] arr.splice(0,4,"w","y")//[1, 1, 1, 1] arr//["w", "y", 2, 3, "h", "e", "e"] 5.join(separator)

5.join(separator) 把數組的所有元素放入一個字符串。元素通過指定的分隔符進行分隔 var arr = [1, 1, 1, 1, 2, 3, "h", "e", "e"] arr.join("-")//"1-1-1-1-2-3-h-e-e"

6.sort(func) var arr = [1, 1, 1, 1, 2, 3, "h", "e", "e"] arr.sort()//[1, 1, 1, 1, 2, 3, "e", "e", "h"]

7.reverse() --倒序

var arr = [1, 1, 1, 1, 2, 3, "h", "e", "e"] arr.reverse()//["e", "e", "h", 3, 2, 1, 1, 1, 1]

8.concat() 合并數組 var a =[1,3,4] var b = [4,2,1] a.concat(b)//[1, 3, 4, 4, 2, 1]

【注】
Array對象實例所運用到的屬性和方法基本包含在Array對象的屬性和方法中

7.Math對象及其實例

Math對象提供一些數學方面的屬性和方法,但Math對象不能創建實例對象

Math對象的屬性

Math.E
Math.LN2
Math.LN10
Math.PI
Math.SQRT2

Math對象的方法1.Math.abs()
Math.abs(-9)//9
2.Math.max() & Math.min()
Math.max(-1,1,6)//6
Math.min(-1,1,6)//-1
3.Math.pow()
Math.pow(2,3)//8
4.Math.exp()
Math.exp(2)//7.3890560989306495
5.Math.sqrt()
Math.sqrt(3)//1.7320508075688772
6.Math.log()
返回以e為底的自然對數值
Math.log(Math.E)//1
7.Math.ceil() & Math.floor()
Math.ceil:接受一個參數,返回大于該參數的最小整數
Math.floor:接受一個參數,返回小于該參數的最大整數
Math.ceil(1.1)//2
Math.floor(1.1)//1
8.Math.round()
用于四舍五入
Math.round(0.1)//0
Math.round(0.5)//1
Math.round(-1.5)//-1
Math.round(-1.6)//2
9.Math.random()
返回0到1之間的一個偽隨機數,可能等于0,但是一定小于1
Math.random()*50+50//[50,100)之間的隨機數
10.三角函數方法

11.valueOf() & toString()
valueOf()返回Math對象的原始值
toString()返回Math的對象類型

8.Date對象
Date對象是JavaScript提供的日期和時間的操作接口
Date實例對象的參數Date對象的起始時間為1970年1月1日00:00:00 UTCnew Date()//Tue Jun 21 2016 21:45:31 GMT+0800 (中國標準時間)
new Date(1000)//Thu Jan 01 1970 08:00:01 GMT+0800 (中國標準時間)
new Date(3600*24*1000)//Fri Jan 02 1970 08:00:00 GMT+0800 (中國標準時間)
new Date("March 5,2015")//Thu Mar 05 2015 00:00:00 GMT+0800 (中國標準時間)
new Date("2015/5/5")//Tue May 05 2015 00:00:00 GMT+0800 (中國標準時間)
new Date(2014,1,1,23,59,23,999)//Sat Feb 01 2014 23:59:23 GMT+0800 (中國標準時間)

Date對象的方法1.Date()本身作為方法
var today = new Date()
2.Date.now()
返回當前距離1970年1月1日 00:00:00 UTC的毫秒數
Date.now()//1466517135730
3.Date.parse()
用來解析日期字符串,返回距離1970年1月1日 00:00:00的毫秒數
Date.parse(2015,2,2)//1420070400000
4.Date.UTC()
返回當前距離1970年1月1日 00:00:00 UTC的毫秒數
Date.UTC(2000,0,1)//946684800000

2.get類:獲取關于時間和日期的值

?getTime():

返回距離1970年1月1日00:00:00的毫秒數 var d = new Date(2000,0,1) d//Sat Jan 01 2000 00:00:00 GMT+0800 (中國標準時間) d.getTime()//946656000000 --

getDate():返回實例對象對應每個月的幾號 d.getDate()//1

-- getDay():返回星期幾 d.getDay()//6

-- getFullYear():返回四位的年份 d.getFullYear()//2000 --

getMonth() & getHours() & getMinutes & getSeconds & getMilliseconds

d.getHours()//0

d.getMinutes()//0

d.getSeconds()//0

d.getMilliseconds()//0

3.set類:設置實例對象的時間和日期

var d = new Date(2000,0,1)

d.setDate(20)//948297600000

d//Thu Jan 20 2000 00:00:00 GMT+0800 (中國標準時間) -- setFullYear() d.setFullYear(2005)//1106150400000 d//Thu Jan 20 2005 00:00:00 GMT+0800 (中國標準時間) -- setMonths & setHours & setMinutes & setSeconds & setMiliseconds效果同上

【注】
關于jsDate對象的時間和日期的取值范圍

分鐘和秒:0 到 59
小時:0 到 23
星期:0(星期天)到 6(星期六)
日期:1 到 31
月份:0(一月)到 11(十二月)
年份:距離1900年的年數

10.標準庫小結


標準庫是js的初始提供的標準內置對象,分為Object對象、Number對象、String對象、Boolean對象、Array對象、Math對象以及Date對象【注】不限于上述對象,還有RegExp對象和JSON對象


js所有的對象都是由Object對象構造的,包括其對象實例以及Number、String、Boolean、Array、Math和Date等對象;


對象一般都會包含屬性和方法,屬性代表屬于對象的某些特征值,方法代表對象的某些功能;


對象在屬性當中通常設置constructor(Math對象沒有)和prototype屬性,部分對象包括length屬性(String和Arrary對象的length有實踐意義);conStructor設置該對象的構造函數功能,prototype設置一個原型對象——使得所有該對象的構造函數創建的對象實例能夠從prototype對象中繼承相應的屬性;


Object對象的屬性和方法最具一般性,大部分屬性和方法可以在其他對象中找到,但是每一個對象還具有各自的屬性和方法(有些只能對象使用,有些能夠對象實例使用(因為部署在各自對象的prototype里))


這里特別說一下valueOf()、toString()在不同對象中的效果,一般valueOf()輸出對象的原始值,toString()輸出字符串

【注】本筆記的資料大部分參考阮一峰的JavaScript標準參考教程和自己在網上查找的結果!

?

?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容