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阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容