Featured image of post (十一)JavaScript内置对象

(十一)JavaScript内置对象

(十一)内置对象

1. 内置对象

  • Javascript中的对象分为3种:自定义对象、内置对象、浏览器对象
  • 前面两种对象是IS基础内容,属于ECMAScript ;第三个浏览器对象属于我们JS独有的,我们JS APl讲解
  • 内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)

2. 数学对象 Math

2.1 Math 的使用

查询 MDN 文档

1
2
3
4
const arr = [3,4,11,24,89,2,34]
console.log(Math.max(...arr)); // 89
console.log(Math.PI); // 3.141592653589793
console.log(Math.max()); // -Infinity

2.1 自定义自己的 Math 对象

我们可以自定义自己的对象。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
const myMath = {
    PI: 3.141592654,
    max: function () {
        let max = arguments[0];
        for (let i = 1; i < arguments.length; i++) {
            max = arguments[i] > max ? arguments[i] : max;
        }
        return max;
    },
    min: function () {
        let min = arguments[0];
        for (let i = 1; i < arguments.length; i++) {
            min = arguments[i] < min ? arguments[i] : min;
        }
        return min;
    }
}

2.3 Math 常用方法

1
2
3
4
5
6
7
Math.PI // 圆周率
Math.floor() // 向下取整
Math.ceil() // 向上取整
Math.round() // 四舍五入,遇到  .5 往大了取
Math.abs() // 绝对值
Math.max() // 最大值
Math.min() // 最小值
1
2
3
4
5
console.log(Math.abs('-1')); // 1
console.log(Math.floor(-2.5)); // 3
console.log(Math.ceil(-2.5)); // -2
console.log(Math.round(-3.5)); // -3
console.log(Math.round(3.5)); // 4

2.4 Math.random 随机数

Math.random 方法返回一个位于区间 [0, 1) 的伪随机浮点数。

1
Math.random(); // 0.41713485547506424

获取闭区间 [a, b] 之间的整数:

1
let ran = parseInt(Math.random() * (b - a + 1)) + a;

获取前闭后开区间 [a, b) 之间的整数:

1
let ran = parseInt(Math.random() * (b - a)) + a;

实例:定义自己的取整函数

1
2
3
4
5
6
7
8
9
// [a, b)
function getRandom1(a, b) {
    return parseInt(Math.random() * (b -a)) + a;
}

// [a, b]
function getRandom2(a, b) {
    return parseInt(Math.random() * (b - a + 1)) + a;
}

应用:随机点名

1
2
let names = new Array('Peter', 'Murphy', 'Jack', 'Darcy', 'Alice');
console.log(names[getRandom2(0, names.length-1)]);

3. 日期对象 Date

3.1 时间格式化

Date 对象是一个构造函数,需要使用 new 来创建日期对象(实例化)。

若没有参数,则默认返回当前系统的当前时间

1
2
let date = new Date();
console.log(date);

若有参数,则返回参数里面的时间。 参数常用写法

1
2
3
4
5
6
7
8
9
let date = new Date();
console.log(date);
// 2021-03-15T05:39:52.204Z
let date1 = new Date(2019, 10, 1);
console.log(date1);
// 2019-10-31T16:00:00.000Z
let date2 = new Date('2019-10-1 8:8:8');
console.log(date2);
// 2019-10-01T00:08:08.000Z

一般使用以下参数形式

1
2
let date3 = new Date('2019-10-1 10:10:10');
let date4 = new Date('2019/10/1');

常用返回日期格式:

1
2
3
4
5
let date = new Date();
console.log(date.getFullYear()); // 2021
console.log(date.getMonth() + 1); // 3,注意得到的月份要加 1
console.log(date.getDate()); // 15
console.log(date.getDay()); // 1

实例一:返回 今天是 2021 年 3 月 15 日 周一 的日期格式。

1
2
3
4
5
6
let year = date.getFullYear();
let month = date.getMonth() + 1;
let dates = date.getDate();
let day = date.getDay();
let days = ['日', '一', '二', '三', '四', '五', '六']
console.log(`今天是 ${year}${month}${dates} 日 周${days[day]}`);

实例二:输出时分秒 15:06:09 格式化时间串。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
function getTime() {
    let time = new Date();
    let h, m, s;
    [h, m, s] = [time.getHours(), time.getMinutes(), time.getSeconds()]
    function check(t) {
        return t < 10 ? '0' + t : t;
    }
    [h, m, s] = [check(h), check(m), check(s)];
    return `${h}:${m}:${s}`;
}
console.log(getTime());

3.2 时间戳(获取1971年1月1日至今过去的毫秒数)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// 1. valueOf(), getTime()
let date = new Date();
console.log(date.valueOf());
console.log(date.getTime());

// 2. 推荐写法
let date1 = +new Date();
console.log(date1);

// 3. H5新增写法
let date2 = Date.now();
console.log(date2);

4. 字符串对象

4.1 基本包装类型

  • 对象才有属性和方法
  • 复杂数据类型才有属性和方法
  • 那么为什么简单数据类型 'aaa'length 属性呢?
  • 基本包装类型:把简单数据类型包装成复杂数据类型,这样基本数据类型也有了属性和方法
1
2
3
4
5
// 1. 简单数据类型包装成复杂数据类型
let temp = new String('aaa');
// 2. 把临时变量赋值给 str
str = temp;
// 3. 销毁临时变量
  • 三种基本包装类型: StringNumberBoolean

4.2 字符串的不可变

指的是其值不变。虽然看上去是可以改变的,但其实是地址变了,内存中开辟了一个内存空间。

4.3 根据字符串返回位置

语法 从 start 索引开始查找 c

1
str.indexOf('c', start)

4.4 根据位置返回字符

  1. charAt()

    1
    
    str.charAt(index);
    
  2. charCodeAt() 返回该位置的字符的 ASCII 值。一般用于判断用户按下了哪个键。

    1
    
    str.charCodeAt(i)
    
  3. str[index] H5 新增写法。

    1
    
    str[i];
    

4.5 拼接以及截取字符串

  1. 字符长拼接

    1
    
    str.concat(str1, str2, str3, ...)
    
  2. 获取子串,[start, start+length]

    1
    
    str.substr(start, length)
    
  3. 切片,前闭后开:[start, end)

    1
    
    str.slice(start, end)
    
  4. 获取子串,前闭后开:[start, end)

    1
    
    str.substring(start, end)
    

4.6 替换、转换为数组

  • 替换 replace,只换一次。

    1
    
    str.replace('a', 'b');
    
  • 转换为数组 split()

    1
    2
    3
    4
    5
    6
    
    let str1 = 'red pink blue';
    console.log(str1.split(' '))
    // [ 'red', 'pink', 'blue' ]
    let str2 = 'red&pink&blue';
    console.log(str2.split('&'))
    // [ 'red', 'pink', 'blue' ]
    

4.7 查找某个字符出现的位置和次数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// 查找某个字符出现的位置和次数
function findLocation(str, char) {
    let res = {
        loc: [],
        count: 0
    };
    for (let i = 0; i < str.length; i++) {
        if (str[i] === char) {
            res.loc.push(i);
            res.count++;
        }
    }
    return res;
}

let ans = findLocation("abcaaadef", "a");
console.log(ans.count, ans.loc); // 4 [ 0, 3, 4, 5 ]

4.8 统计出现次数最多的字符

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
function findMost(str) {
    let res = {};
    for (const i in str) {
        if (str[i] in res) {
            res[str[i]]++;
        } else {
            res[str[i]] = 1;
        }
    }
    let temp = -Infinity;
    let ans;
    for (const k in res) {
        if (res[k] > temp) {
            temp = res[k];
            ans = k;
        }
    }
    return [ans, temp];
};
console.log(findMost("abbcaaa")); // [ 'a', 4 ]
Powered by GitHub.Pages
Built with Hugo
主题 StackJimmy 设计
© Licensed Under CC BY-NC-SA 4.0