JS中的一些其他内建对象

一.Date

1.Date对象的创建

  • 在JS中用Date对象来表示一个时间
  • Date的无参构造函数会封装当前代码执行时的时间.
  • 以字符串为参数的构造函数, 可以指定Date对象的时间.字符串格式: “月/日/年 时:分:秒”
1
2
3
4
var date1 = new Date();
console.log(date1);//输出:计算机系统的当前时间
var date2 = new Date("01/01/2019 08:01:01");//"01-01-2019"这样也行
console.log(date2);//输出:Tue Jan 01 2019 08:01:01 GMT+0800 (中国标准时间)

2.Date的一些方法

getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)
getMonth() 从 Date 对象返回月份 (0 ~ 11)
getFullYear() 从 Date 对象以四位数字返回年份
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)
getTime() 返回(格林威治时间的)1970年1月1日 00:00:00至今的毫秒数, 即时间戳
setTime() 以毫秒设置 Date 对象


Date.now() 返回当前的时间戳

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var date1 = new Date("01-27-2019 08:16:24.100");
console.log(date1.getDate());//输出:27
console.log(date1.getDay());//输出:0
console.log(date1.getMonth());//输出:0
console.log(date1.getFullYear());//输出:2019
console.log(date1.getHours());//输出:8
console.log(date1.getMinutes());//输出:16
console.log(date1.getSeconds());//输出:24
console.log(date1.getMilliseconds());//输出:100

var date2 = new Date("01-01-1970");
console.log(date2.getTime());//中文系统下,我们与格林威治时间相差8h,输出:-28800000

date2.setTime(date1.getTime());
console.log(date2);//输出:Sun Jan 27 2019 08:16:24 GMT+0800 (中国标准时间)

console.log(Date.now());//输出当前时间戳

二.Math

Math和其他内置对象不同, 它不能是一个构造函数, 不能创建对象, 它只是一个工具类, 里面封装了一些数学运算中常用的属性和函数.

1.常用属性和函数

Math.PI 返回圆周率(约等于3.14159)
abs(x) 返回数的绝对值
ceil(x) 对数进行上舍入
floor(x) 对数进行下舍入
round(x) 把数四舍五入为最接近的整数
random() 返回0~1之间的随机数. 生成x~y之间的随机数: Math.round(Math.random()*(y-x)+x);
max(x,y) 返回 x 和 y 中的最高值
min(x,y) 返回 x 和 y 中的最低值
pow(x,y) 返回 x 的 y 次幂
sqrt(x) 返回数的平方根

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
console.log(Math.PI);//输出:3.141592653589793
console.log(Math.abs(-10));//输出:10
console.log(Math.ceil(1.001));//输出:2
console.log(Math.ceil(1.999));//输出:2
console.log(Math.floor(1.001));//输出:1
console.log(Math.floor(1.999));//输出:1
console.log(Math.round(1.499));//输出:1
console.log(Math.round(1.5));//输出:2
for(var i = 0;i < 10;i ++){
//生成10个20-80间的随机数,包括20和100
console.log(Math.round(Math.random()*80+20));
}
console.log(Math.max(1,10,100));//输出:100
console.log(Math.min(1,10,100));//输出:1
console.log(Math.pow(2,10));//输出:1024
console.log(Math.sqrt(100));//输出:10

三.包装类

回顾: 基本数据类型(Number String Boolean Null Undefined)VS引用数据类型(Object)

JS为我们提供了三个包装类(Number String Boolean):
  Number—>可以将基本数据类型的Number转换为Number对象
  String —>可以将基本数据类型的String转换为String对象
  Boolean—>可以将基本数据类型的Boolean转换为Boolean对象

但是, 注意: 实际应用时我们一般不会使用基本数据类型的对象, 若使用, 在做比较时可能会带来一些不可预期的结果

  • 方法和属性只能添加给对象, 不能添加给基本数据类型.
  • 当我们调用基本数据类型的属性和方法时, 浏览器会临时使用包装类将其转换为对象, 再调用对象的属性和方法.
  • 包装类一般是浏览器底层自己调用的, 我们一般不会使用它们.
1
2
3
4
5
6
7
8
9
10
11
12
13
var num = new Number(123);
var str = new String("hello");
var bool = new Boolean(false);
console.log(num == 123);//输出:true
console.log(num === 123);//输出:false
if(bool){//bool是对象,对象转换为Boolean时都会转换为true,所以下述代码会执行
alert("我执行了~~~");
}
var a = 123;
a.hello = "hello";//这里会将a临时转换为对象,但执行完该对象便会被销毁,故后面调用会打印undefined
console.log(a.hello);//输出:undefined

console.log(a.toString(16));//输出:7b

1.数字进制间的转换

Number对象有个方法toString()我们常用它来转换进制, 参数为基数

1
2
3
var num = 123;
console.log(num.toString(16));//输出:7d
console.log(num.toString(2));//输出:1111011

四.String对象的方法

length 属性, 字符串的长度
charAt() 返回在指定位置的字符
charCodeAt() 返回在指定的位置的字符的 Unicode 编码
concat() 连接字符串
String.fromCharCode() 从字符编码创建一个字符串, 参数一个或多个Unicode值
indexOf() 检索字符串, 有则返回索引, 没有返回-1
--------参数:①要检索的字符串, 必需
--------②要从哪个位置开始检索, 不传从0开始检索
lastIndexOf() 和indexOf类似, 不过这个方法从后向前搜索字符串


slice() 提取字符串的片断, 将指定的字符串封装到新字符串返回
--------两个参数:①截取开始位置的索引, 包括开始位置, 可以为负数(-1表示倒数第一个元素)
--------②结束位置的索引, 不包括结束位置(该参数可省略, 表示截取之后所有元素), 可以为负数
substring() 提取字符串中两个指定的索引号之间的字符
--------与splice类似, 但其参数不可为负值, 若传负值, 则默认使用0.
--------该方法还会自动调整参数位置, 若第二个参数小于第一个, 则交换两个参数
substr() 从起始索引号提取字符串中指定数目的字符
--------ECMAscript 没有对该方法进行标准化, 但现今大部分浏览器支持
--------两个参数:①截取开始位置索引(可为负数)②(可选参数)要截取字符的数量


split() 把字符串分割为字符串数组
--------两个参数:①必需, 字符串或正则表达式, 从该参数指定的地方分割
--------②可选, 指定返回的数组的最大长度
toLowerCase() 把字符串转换为小写
toUpperCase() 把字符串转换为大写

这些方法都不会改变原来的字符串

1.连接检索字符串

1
2
3
4
5
6
7
8
9
10
11
12
var str = "hello China,hello World!";
console.log(str.length);//24
console.log(str.charAt(23));//!
console.log(str.charCodeAt(0));;//104即h的Unicode值
console.log(String.fromCharCode(104,101,108,108,111));//hello
console.log(String.fromCharCode(0x4e2d,0x56fd));//中国
console.log(str.concat("你好","中国"));//hello China,hello World!你好中国

console.log(str.indexOf("hello"));//0
console.log(str.indexOf("hello",1));//12
console.log(str.lastIndexOf("hello"));//12
console.log(str.indexOf("p"));//-1

2.截取字符串

1
2
3
4
5
var str = "abcdefghijklmn";
console.log(str.slice(-3,-1));//lm
console.log(str.substring(1,-1));//负数会默认为0,然后交换参数为0,1;输出:a
console.log(str.substr(-4,3));//-3开始的三个字符,即:klm
console.log(str.substr(0));//abcdefghijklmn

3.分割转换字符串

1
2
3
4
5
6
7
8
9
10
var str = "Abc,def,ghi,jkL";
var result = str.split(",");
console.log(Array.isArray(result));//true
console.log(result.length);//4

result = str.split(",",2);
console.log(result);//"Abc","def"

console.log(str.toUpperCase());//"ABC,DEF,GHI,JKL"
console.log(str);//"abc,def,ghi,jkl"

评论