之前我们学习过用花括号({})可以生成生成一个匿名 对象。
实际上,按“面向对象”的观点,对象 是 类 的实例:
张三 这个 对象 就是 人 的 实例(实际的例子)。
所以要有对象必须先有类。(参考:C#)
匿名类对象,就是一个没有类名的对象。
JavaScript号称是一个“面向对象”的语言,还是提供了很多内置类型的。
演示:native code
之前我们学过的所有基本(primitive)类型,都有对应的类的:String / Number / Boolean / Array(数组),注意他们的首字母大写。
var n = new Number(123);
我们就能得到一个相应的对象。得到的对象一样可以按基本类型变量使用:
new Number(123) -23 //100
但是,他们属于
new Number(123) == 123 //true new Number(123) === 123 //false,因为 typeof new Number(123) //Object
复习:typeof 123 结果是什么?
@猜一猜@:这样的代码结果是什么?
Number(888) + 98 //注意Number()前面没有new
这是因为在JavaScript中没有真正的“类”的定义,类就是函数,函数也可以是类。(后文详述)
所以你可能会觉得有无new都无所谓。但是:
Boolean('false') //true new Boolean('false') //false
找谁说理去?!
以上这些包装函数,知道就行,不建议在开发中使用。
复习:length可以赋值,改变数组的长度,得到 undefined (增加的)或 截短 的数组。
还有以下一些常用方法:
[1,18,7,92,2].sort()// [ 1, 18, 2, 7, 92 ] what?可以加一个回调函数:
[1,18,7,92,2].sort(function(a, b){ return a>b ? 1 : -1; //返回值只能是1或-1,不能是bool值 })
Math类和其他类不一样,不能new出一个Math对象来:
我们只能使用Math的静态方法。
补充:静态 vs 实例
Math.abs(-23)
new Array().length
Math.ceil(Math.random()*1000)
JavaScript奇怪的地方在于,如果我们要四舍五入到n位小数位,需要用到的是包装类Number的实例方法toFixed(n):
7.654.toFixed(2) //7.65 7.658.toFixed(2) //7.66
更奇怪的是,他们返的是字符串!
另外,这两个方法也很常见:parseInt() / parseFloat(),他们能够将其他类型数据转换成整数(int)或x小数(float)类型。
还可以选择进制,比如将100101按二进制转换成10进制整数(返回始终为10进制)
parseInt('100101', 2)
常见面试题:parseInt(str)和+str的区别
Javascript总是让人一言难尽啊!o(╥﹏╥)o
总体上感觉,
parseInt('32abc') //32 +'32abc' //NaN //然鹅 parseInt('') //NaN +'' //0
parseInt(true) //NaN +true //1 parseInt([]) //NaN +[] //0
parseInt({}) +{} parseInt(undefined) +undefined
+null //0 parseInt(null) //NaN
在我我们学习内置函数的时候,有时候是直接调用函数,如:parseInt();但更多的时候是从一个“变量”调用,如:'yuanzhan'.substring(2,4),为什么呢?
系统当前日期:new Date()
还可以按:年,月,日,小时,分钟,秒……指定的日期:new Date(2019,4,20,.....) ,但是等等,为什么是5月?因为Javascript的月份(注意:仅仅只有月份)是从0开始计数的。
但是,new Date()还可以传字符串。试一试:new Date('2019/4/20'),这时候你发现又是4月了,ʅ(‾◡◝)ʃ
拿到一个Date对象,我们就可以调用它的getXXX()方法,获得它的年与日等
new Date().getYear() //121结果不是2021,而是121(@想一想@:为什么?)
new Date().getFullYear()
new Date('2021/4/24').getMonth() //3
set可用于修改日期
如果指定的日期值 n :就在本年/月/周……内,直接设定在本年/月/周……第 n 月/周/日;
但是,
增/减时间:否则
设置一个月的某一天为上个月的最后一天:
d.setDate(0);
字符串解析:Date.parse('str') 返回时间戳:一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。验证方法:
new Date(0)
这里又有一个记忆陷阱:getYear()是从1900年起算,但时间戳是从1970年算,(*/ω\*)
更多内置函数,使用:MDN(JavaScript文档)
String() vs toString():null / undefined / 123
123.toString() 123..toString() (123).toString() null.toString() undefined.toString() ……