第5章-基本引用类型-红宝书笔记

Date

let someDate = new Date();
console.log(someDate)//Mon Jan 18 2021 15:57:59 GMT+0800 (中国标准时间)

很多浏览器会选择用当前日期替代越界的日期
不传入参数创建的对象保存的是当前日期和时间

Date.parse()方法

let someDate = new Date(Date.parse("May 23, 2019"));

等价于

let someDate = new Date("May 23, 2019");

Date.UTC()方法

// GMT 时间 2000 年 1 月 1 日零点
let y2k = new Date(Date.UTC(2000, 0)); 
// GMT 时间 2005 年 5 月 5 日下午 5 点 55 分 55 秒
let allFives = new Date(Date.UTC(2005, 4, 5, 17, 55, 55));

与 Date.parse()一样,Date.UTC()也会被 Date 构造函数隐式调用
这种情况下创建的是本地日期

上述代码等价于
// 本地时间 2000 年 1 月 1 日零点
let y2k = new Date(2000, 0); 
// 本地时间 2005 年 5 月 5 日下午 5 点 55 分 55 秒
let allFives = new Date(2005, 4, 5, 17, 55, 55);

Date.now()方法

返回表示方法执行时日期和时间的毫秒数
这个方法可以方便地用在代码分析中

// 起始时间
let start = Date.now(); 
// 调用函数
doSomething(); 
// 结束时间
let stop = Date.now(), 
result = stop - start;

继承的方法

  • 如果有任一操作数是对象,则调用其 valueOf()方法,取得结果后再根据前面的规则执行比较。
  • 如果没有 valueOf()操作符,则调用 toString()方法,取得结果后再根据前面的规则执行比较。
    Date 类型的 valueOf()方法返回的是日期的毫秒
let date1 = new Date(2019, 0, 1); // 2019 年 1 月 1 日
let date2 = new Date(2019, 1, 1); // 2019 年 2 月 1 日
console.log(date1 < date2); // true 
console.log(date1 > date2); // false

日期格式化方法

它们都会返回字符串

  • toDateString()显示日期中的周几、月、日、年(格式特定于实现);
  • toTimeString()显示日期中的时、分、秒和时区(格式特定于实现);
  • toLocaleDateString()显示日期中的周几、月、日、年(格式特定于实现和地区);
  • toLocaleTimeString()显示日期中的时、分、秒(格式特定于实现和地区);
  • toUTCString()显示完整的 UTC 日期(格式特定于实现)。

日期/时间组件方法

在这里插入图片描述
在这里插入图片描述


RegExp

省略…
正则表达式,后面单独开一章节学


原始值包装类型

ES提供了3种特殊的引用实例,Boolean、Number 和 String

每当用到某个原始值的方法或属性时,后台都会创建一个相应原始包装类型的对象

let s1 = "some text"; 
let s2 = s1.substring(2);

上述代码后台都会执行以下 3 步:

  • (1) 创建一个 String 类型的实例;
  • (2) 调用实例上的特定方法;
  • (3) 销毁实例。

可以想象成下面的代码

let s1 = new String("some text"); 
let s2 = s1.substring(2); 
s1 = null;

引用类型与原始值包装类型的主要区别在于对象的生命周期。
下面代码,表示不能给原始包装类型添加属性

let s1 = "some text"; 
s1.color = "red"; 
console.log(s1.color); // undefined

Object 构造函数

传入什么就返回相应原始值包装类型的实例

let obj = new Object("some text"); 
console.log(obj instanceof String); // true

如果传给 Object 的是字符串,则会创建一个 String 的实例

使用 new 调用原始值包装类型的构造函数,与调用同名的转型函数并不一样。

let value = "25"; 
let number = Number(value); // 转型函数
console.log(typeof number); // "number" 
let obj = new Number(value); // 构造函数
console.log(typeof obj); // "object"

Boolean

建议不要使用Boolean 对象
因为对对象进行valueOf会返回true,无论它本身是true还是false
例如:

let falseObject = new Boolean(false); 
let result = falseObject && true; 
console.log(result); // true 

let falseValue = false; 
result = falseValue && true; 
console.log(result); // false

Number

创建一个Number对象

let numberObject = new Number(10);

valueOf()方法返回 Number 对象表示的原始数值
toFixed()方法返回包含指定小数点位数的数值字符串
而且会四舍五入处理

let num = 10; 
console.log(num.toFixed(2)); // "10.00"

toExponential(),返回以科学记数法(也称为指数记数法)表
示的数值字符串。

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

toPrecision()方法根据数值和精度来决定调用 toFixed()还是toExponential()。

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

Number.isInteger()方法,判断是否是一个整数

console.log(Number.isInteger(1)); // true 
console.log(Number.isInteger(1.00)); // true 
console.log(Number.isInteger(1.01)); // false

Number.isSafeInteger()方法

console.log(Number.isSafeInteger(-1 * (2 ** 53))); // false 
console.log(Number.isSafeInteger(-1 * (2 ** 53) + 1)); // true 
console.log(Number.isSafeInteger(2 ** 53)); // false 
console.log(Number.isSafeInteger((2 ** 53) - 1)); // true

String

创建

let stringObject = new String("hello world");

每个 String 对象都有一个 length 属性

let stringValue = "hello world"; 
console.log(stringValue.length); // "11"

注意,即使字符串中包含双字节字符(而不是单字节的 ASCII 字符),也仍然会按单字符来计数。
charCodeAt()方法
这个方法返回指定索引位置的码元值

let message = "abcde"; 
// Unicode "Latin small letter C"的编码是 U+0063 
console.log(message.charCodeAt(2)); // 99

fromCharCode()方法
用于根据给定的 UTF-16 码元创建字符串中的字符。

// Unicode "Latin small letter A"的编码是 U+0061 
// Unicode "Latin small letter B"的编码是 U+0062 
// Unicode "Latin small letter C"的编码是 U+0063 
// Unicode "Latin small letter D"的编码是 U+0064 
// Unicode "Latin small letter E"的编码是 U+0065 
console.log(String.fromCharCode(0x61, 0x62, 0x63, 0x64, 0x65)); // "abcde"

codePointAt()方法
可以从指定码元位置识别完整的码点。

字符串操作方法

concat()方法
用于将一个或多个字符串拼接成一个新字符串。

let stringValue = "hello "; 
let result = stringValue.concat("world", "!"); 
console.log(result); // "hello world!" 
console.log(stringValue); // "hello"

提取子字符串的方法

slice()、substr()和 substring()

let stringValue = "hello world"; 
console.log(stringValue.slice(3)); // "lo world" 
console.log(stringValue.substring(3)); // "lo world" 
console.log(stringValue.substr(3)); // "lo world" 
console.log(stringValue.slice(3, 7)); // "lo w" 
console.log(stringValue.substring(3,7)); // "lo w" 
console.log(stringValue.substr(3, 7)); // "lo worl"
字符串位置方法

indexOf()和 lastIndexOf()
indexOf()是从头开始找第一个目标字符串
lastIndexOf()是从头开始找第一个目标字符串

let stringValue = "hello world"; 
console.log(stringValue.indexOf("o")); // 4 
console.log(stringValue.lastIndexOf("o")); // 7

使用第二个参数并循环调用,在字符串中找到所有的目标子字符串

let stringValue = "Lorem ipsum dolor sit amet, consectetur adipisicing elit"; 
let positions = new Array(); 
let pos = stringValue.indexOf("e"); 
while(pos > -1) { 
 positions.push(pos); 
 pos = stringValue.indexOf("e", pos + 1); 
} 
console.log(positions); // [3,24,32,35,52]

字符串包含方法

startsWith()、endsWith()和 includes()。

  • startsWith()用于检测字符串是否以指定的子字符串开始
  • endsWith()用于检测字符串是否以指定的子字符串结束
  • includes()方法用于判断字符串是否包含指定的子字符串
let message = "foobarbaz"; 
console.log(message.startsWith("foo")); // true 
console.log(message.startsWith("bar")); // false 
console.log(message.endsWith("baz")); // true 
console.log(message.endsWith("bar")); // false 
console.log(message.includes("bar")); // true 
console.log(message.includes("qux")); // false

trim()方法

删除一个字符串前、后所有空格符,再返回结果。

let stringValue = " hello world "; 
let trimmedStringValue = stringValue.trim(); 
console.log(stringValue); // " hello world " 
console.log(trimmedStringValue); // "hello world"

trimLeft()和 trimRight()方法分别用于从字符串开始和末尾清理空格符。


repeat()方法

接收一个整数参数,表示要将字符串复制多少次

let stringValue = "na "; 
console.log(stringValue.repeat(16) + "batman"); 
// na na na na na na na na na na na na na na na na batman

padStart()和 padEnd()方法

padStart()和 padEnd()方法会复制字符串
如果小于指定长度,则在相应一边填充字符

let stringValue = "foo"; 
console.log(stringValue.padStart(6)); // " foo" 
console.log(stringValue.padStart(9, ".")); // "......foo" 
console.log(stringValue.padEnd(6)); // "foo " 
console.log(stringValue.padEnd(9, ".")); // "foo......"

如果长度小于或等于字符串长度,则会返回原始字符串


字符串迭代与解构

地把字符串分割为字符数组:

let message = "abcde"; 
console.log([...message]); // ["a", "b", "c", "d", "e"]

字符串大小写转换

常用两个:toLowerCase()、toLocaleLowerCase()
toLocaleLowerCase()和 toLocaleUpperCase()方法旨在基于
特定地区实现。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值