JS高程-5-3:基本包装类型和单体内置对象

文章为《JavaScript高级程序设计》(第三版)笔记。

一.基本包装类型

基本包装类型包括:Boolean、Number和String。

1.Boolean类型

这里我们需要理解基本类型布尔值与引用类型布尔值的区别。

var falseObject = new Boolean(false); // 引用类型
var falseValue = false;               // 基本类型

console.log(typeof falseObject); // object
console.log(typeof falseValue);  // boolean
console.log(falseObject instanceof Boolean); // true
console.log(falseValue instanceof Boolean);  // false

通过上面的例子,我们就不难理解下面例子中的输出结果了

var falseObject = new Boolean(false);
var res1 = falseObject && true;
var res2 = falseObject.valueOf() && true;

console.log(res1); // true
console.log(res2); // false

由此可见,使用Boolean对象往往会造成误解,所以建议不用。

2.Number类型

基本类型数值与引用类型数值的区别与Boolean类型类似,这里就不在累述。

这里介绍几个用于将数值格式化为字符串的方法。

toFixed()方法,会按照指定的小数位返回数值的字符串表示。

var num1 = 10;
var num2 = 10.005;

console.log(num1.toFixed(2)); // "10.00"
console.log(num2.toFixed(2)); // "10.01"

我们看到,toFixed()方法还会自动舍入,但要注意,不同浏览器给这个方法设定的舍入规则可能会有所不同。

toExponential()方法,返回以指数表示法(也称e表示法)表示的数值的字符串形式。该方法接受一个参数,表示小数位数。

var num = 10;
console.log(num.toExponential(1)); // "1.0e+1"

toPrecision()方法,根据数值返回合适的格式。其接收一个参数,表示数值的所有数字的位数(不含指数部分)。

var num = 99;
console.log(num.toPrecision(1)); // "1e+2"
console.log(num.toPrecision(2)); // "99"
console.log(num.toPrecision(3)); // "99.0"

3.String类型

(1)字符方法

用于访问字符串中特定字符的方法有:charAt()和charCodeAt()。这两个方法都接收一个参数,即字符串的索引。charAt()方法以单字符字符串的形式放回给定位置的那个字符串;charCodeAt()方法则返回字符编码。

var stringVal = 'hello world';
console.log(stringVal.charAt(1));     // "e"
console.log(stringVal.charCodeAt(1)); // 101

(2)字符串操作方法

concat()方法,用于将一个或多个字符串拼接起来。该方法不会修改字符串本身的值。

var stringVal = 'hello ';
var res = stringVal.concat('world', '!');

console.log(res);       // "hello world!"
console.log(stringVal); // "hello "

三个基于子字符串创建新字符串的方法:slice()、substr()和substring()。这三个方法都会返回被操作字符串的一个子字符串,而且都接受一个或两个参数。第一个参数指定子字符串的开始位置,第二个参数(可选)表示子字符串到哪里结束。slice()和substring()的第二个参数指定的是子字符串最后一个字符后面的位置。substr()的第二个参数指定的是返回的字符个数。同时,这三个方法也不会修改字符串本身的值。

var stringVal = 'hello world';

console.log(stringVal.slice(3));      // "lo world"
console.log(stringVal.substing(3));   // "lo world"
console.log(stringVal.substr(3));     // "lo world"

console.log(stringVal.slice(3, 7));   // "lo w"
console.log(stringVal.substing(3, 7));// "lo w"
console.log(stringVal.substr(3, 7));  // "lo worl"

当传入参数为负数时,这三个方法的行为又各不相同,这里暂不列举。

(3)字符位置方法

indexOf()和lastIndexOf()。这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置(如果没有找到,则返回-1)。indexOf()是从头向后搜索,lastIndexOf()是从后向前搜索。

var stringVal = 'hello world';

console.log(stringVal.indexOf('o'));      // 4
console.log(stringVal.lastIndexOf('o'));  // 7

(4)trim()方法

这个方法会创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。不会修改字符串本身的值。

var stringVal = ' hello world ';
var res = stringVal.trim();

console.log(res);       // "hello world"
console.log(stringVal); // " hello world "

(5)字符串大小写转换方法

转小写:toLowerCase()和toLocaleLowerCase();

转大写:toUpperCase()和toLocaleUpperCase()。

var stringVal = 'Hello world';

console.log(stringVal.toLowerCase());       // "hello world"
console.log(stringVal.toLocaleLowerCase()); // "hello world"
console.log(stringVal.toUpperCase());       // "HELLO WORLD"
console.log(stringVal.toLocaleUpperCase()); // "HELLO WORLD"

(6)字符串的模式匹配方法

match()方法,在字符串上调用这个方法,本质上与调用RegExp的exec()方法相同。match()方法只接受一个参数,要么是一个正则表达式,要么是一个RegExp对象。

var text = 'cat, bat, sat, fat';
var pattern = /.at/;

// 与 pattern.exec(text) 相同
var matches = text.match(pattern);
console.log(matches.index);       // 0
console.log(matches[0]);          // "cat"
console.log(pattern.lastIndex);   // 0

search()方法,这个方法接收一个参数,要么是一个正则表达式,要么是一个RegExp对象。该方法返回字符串中第一个匹配项的索引;如果没有找到,则返回-1。

var text = 'cat, bat, sat, fat';
var pos = text.search(/at/);

console.log(pos);       // 1

replace()方法,这个方法用于替换子字符串。接收两个参数:第一个参数可以是一个RegExp对象或者一个字符串;第二个参数可以是一个字符串或者一个函数。

var text = 'cat, bat, sat, fat';
var res = text.replace('at', 'ond');
console.log(res);                   // "cond, bat, sat, fat"

res = text.replace(/at/g, 'ond');
console.log(res);                   // "cond, bond, sond, fond"

console.log(text);                  // "cat, bat, sat, fat"

split()方法,这个方法可以基于指定的分隔符将一个字符串分割成多个子字符串,并将结果放在一个数组中。分隔符可以是字符串,也可以是一个RegExp对象。split()方法可以接收第二个参数,用于指定数组大小。

var stringVal = 'c';
var res1 = stringVal.split(',');    // ["cat", "bat", "sat", "fat"]
var res1 = stringVal.split(',', 2); // ["cat", "bat"]

(7)localeCompare()方法

这个用得不多,用于比较两个字符串。这里不介绍。

(8)fromCharCode()方法

用得不多。这个方法的任务是接收一或多个字符编码,然后将它们转换成一个字符串。

二.单体内置对象

1.Global对象

这里暂不介绍。

2.Math对象

(1)Math对象的属性

比如Math.PI代表 π 的值,其他的的值可参考:https://www.w3school.com.cn/jsref/jsref_obj_math.asp

(2)min()和max()方法

min()和max()方法用于确定一组数值中的最大值和最小值。

var max = Math.max(3, 5, 4, 1); // 5
var min = Math.min(3, 5, 4, 1); // 1

 如果要找到数组中的最大或最小值,可以使用apply()方法,或者使用ES6中的扩展运算符(...)

var arr = [3, 5, 4, 1];
var max1 = Math.max.apply(Math, arr); // 5
var max2 = Math.max(...arr);          // 5

(3)舍入方法

三个舍入方法:

  • Math.ceil()执行向上舍入;
  • Math.floor()执行向下舍入;
  • Math.round()执行标准舍入,即四舍五入。
console.log(Math.ceil(25.5));  // 26
console.log(Math.floor(25.5)); // 25
console.log(Math.round(25.5)); // 26

(4)random()方法

返回大于等于0小于1的一个随机数。

// 返回一个1到10之间的数值
var rum = Math.floor(Math.random() * 10 + 1);

(5)其他方法

可参考:https://www.w3school.com.cn/jsref/jsref_obj_math.asp

猜你喜欢

转载自blog.csdn.net/qq_39025670/article/details/105211695