《JavaScript高级程序设计》__ 基本引用类型(下)

简介: 前言大家好,我是HoMeTown,web领域有一本神书大家应该都有看过,这本书我看过两遍,但是每次看都是粗粗的略过一些重要的知识点,甚至一些面试过程中的问题,在这本书里都能找到答案。

Math

min & max

let nums = [1,2,3,4,5]
console.log(Math.min(...nums)) // 1
console.log(Math.max(...nums)) // 5
复制代码

ceil、floor、round

  • ceil: 向上舍入为最近接的整书
  • floor:向下舍入为最接近的整数
  • round:执行四舍五入

random

返回一个0~1范围内的随机数,其中包含0但是不包含1。

随机整数公式:

number = Math.floor(Math.random() * total_number_of_choices + first_possible_value)
复制代码
// 随机数
function mathRandom(lowerValue, upperValue) {
  let choices = upperValue - lowerValue + 1
  return Math.floor(Math.random() * choices + lowerValue)
}
let num = mathRandom(2,10)
console.log(num) // 2~10范围内的值,包含2&10
复制代码

Global

isNaN、isFinite、parseInt、parseFloat

encodeURI & encodeURIComponent

用于编码统一资源标识符(URI),以便传给浏览器。

encodeURI不会编码属于URL组件的特殊字符,比如:冒号、斜杠、问号、井号

encodeURIComponet会编码它发现的所有非标准字符:

let uri = "http://www.ishometown.com/illegal value.js#start";
console.log(encodeURI(uri)) // http://www.ishometown.com/illegal%20value.js#start
console.log(encodeURIComponent(uri)) // http%3A%2F%2Fwww.ishometown.com%2Fillegal%20value.js%23start
复制代码

decodeURI & decodeURIComponent

decodeURI只能对使用encodeURI编码过的字符解码。

let uri = 'https://www.ishometown.com/vue react.js#blog'
let ecuUri = encodeURI(uri)
let ecucUri = encodeURIComponent(uri)
console.log(decodeURI(ecuUri)) // https://www.ishometown.com/vue react.js#blog
console.log(decodeURIComponent(ecucUri)) // https://www.ishometown.com/vue react.js#blog
console.log(decodeURI(ecucUri)) // https%3A%2F%2Fwww.ishometown.com%2Fvue.js%23blog
复制代码

eval

解释器发现eval()调用时,会把参数当做实际的ECMAScript语句,插入到当前位置:

let msg = 'hometown'
eval("console.log(msg)")
复制代码

Date

Date类型保存UTC时间1970年1月1日0时 至今 所有经过的毫秒数。

使用方法:

new Date()
复制代码

Date 构造函数接受一个参数,可以格式化一个日期,格式化的时候会隐式调用Date.parse方法:

let someDate = new Date('2020-01-01') // 返回 GMT
// 等价于
let someDate = Date.parse('2020-01-01')// 返回时间戳
复制代码

继承的方法

Date类型的valueOf方法不返回字符串,返回的是时间戳:

const now = new Date()
console.log(now.getTime() === now.valueOf()) // true
复制代码

所以两个Date类型的值可以直接比较:

const date1 = new Date(2022, 0, 1)
const date2 = new Date(2022, 0, 2)
console.log(date1 < date2) // true
复制代码

日期格式化方法

  • toDateString() 返回日期的周、月、日、年
  • toTimeString() 返回日期的时、分、秒、时区
  • toLocaleDateString() 返回日期的周、月、日、年
  • toLocaleTimeString() 返回日期的时、分、秒
  • toUTCString() 返回完整的UTC日期
  • toGMTString()toUTCString一样,目的是为了向后兼容。

这些方法与toLocaleStringtoString一样,会因浏览器而异。

// Chrome
const date = new Date() 
console.log(date.toDateString()) // Mon Oct 31 2022
console.log(date.toTimeString()) // 14:23:51 GMT+0800 (中国标准时间)
console.log(date.toLocaleDateString()) // 2022/10/31
console.log(date.toLocaleTimeString()) // 14:23:51
console.log(date.toUTCString()) // Mon, 31 Oct 2022 06:23:51 GMT
console.log(date.toGMTString()) // Mon, 31 Oct 2022 06:23:51 GMT
复制代码

RegExp

ECMAScript通过RegExp支持正则表达式。

const expression = /pattern/flags;
复制代码

pattern 可以是任何的正则表达式。

falgs 可以拥有0个或者多个,值有以下可选值:

  • g 全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。
  • i 不区分大小写
  • m 多行模式
  • u Unicode模式
const pattern1 = /at/g; // 匹配字符串中所有的'at'
const pattern2 = /[bc]at/i; // 匹配第一个'bat' || 'cat'不区分大小写
复制代码

元字符需要转义:

  • {
  • [
  • \
  • ^
  • $
  • |
  • }
  • ]


  • .
  • ?

ECMAScript中的正则表达式除了用字面量定义,还可以用构造函数:

let pattern1 = /[bc]at/gi;
// 等价于
let pattern1 = new RegExp("[bc]at","gi") // 两个参数都是字符串。
复制代码

RegExp也可以基于已有的正则表达式实例使用,并可以选择性的修改flags

let pattern1 = /[bc]at/g;
let pattern2 = new RegExp(pattern1, "i") // /[bc]at/i
复制代码

RegExp实例属性

每个RegExp实例都有以下属性:

  • global: 布尔值,是否设置了flag: g
  • ignoreCase: 布尔值,是否设置了flag: i
  • ......
let pattrn1 = /[bc]at/g;
let pattrn2 = /[ab]cd/i;
console.log(pattrn1.global, pattrn2.global) //true false
console.log(pattrn1.ignoreCase, pattrn2.ignoreCase) // false true
复制代码

RegExp实例方法

exec

检索字符串中的正则表达式的匹配,返回一个数组。

var text = 'JavaScript, VBScript, JScript and ECMAScript';
var pattrn = /[a-zA-Z]+Script/g;
console.log(pattrn.exec(text)) // ["JavaScript", index: 0 ,.....]
console.log(pattrn.exec(text)) // ["VBScript", index: 0 ,.....]
console.log(pattrn.exec(text)) // ["JScript", index: 0 ,.....]
复制代码

test

搜索字符串指定的值,根据结果并返回真或假。

const pattern= new RegExp("h", 'i');
console.log(pattern.test("HoMeTown")) // true
console.log(pattern.test("ooo")) // false
复制代码

总结

JavaScript中的对象成为引用值。

  • JavaScript中的引用值与传统的面向对象编程中的类相似,但是实现不同。
  • 函数实际上是Function类型的实例,也就是说,函数也是对象,所以函数也有方法和属性!
  • Boolean、Number、String的原始值可以当做对象来用,因为他们有原始包装类型,包装类型都映射到同名的原始类型,原始值会在底层自动创建包装类型的对象,涉及到原始值的语句执行完毕后,包装对象就会被销毁。
  • 代码开始执行,全局上下文中会存在两个内置对象:Global和Math。Global对象无法直接访问,浏览器将其实现为了window对象。
目录
相关文章
|
17天前
|
存储 JavaScript 前端开发
js的基础类型和引用类型
【10月更文挑战第29天】理解 JavaScript 中的基础类型和引用类型的区别对于正确地编写代码和理解程序的行为非常重要。在实际开发中,需要根据具体的需求合理地选择和使用不同的数据类型,以避免出现一些意想不到的错误和问题。同时,在处理引用类型数据时,要特别注意对象的引用关系,避免因共享引用而导致的数据不一致等问题。
|
1月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
71 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
6月前
|
存储 JavaScript
JS中原始类型与引用类型
JS中原始类型与引用类型
|
11月前
|
JavaScript 前端开发 Java
|
11月前
|
存储 JavaScript 前端开发
|
人工智能 JavaScript 前端开发
JavaScript高级程序设计继承(二)
有时候可能需要定义这样一个类,它可供其他类继承,但本身不会被实例化。虽然 ECMAScript 没 有专门支持这种类的语法 ,但通过 new.target 也很容易实现。new.target 保存通过 new 关键字调 用的类或函数。通过在实例化时检测 new.target 是不是抽象基类,可以阻止对抽象基类的实例化:
147 0
|
前端开发 JavaScript 索引
前端祖传三件套JavaScript的对象之常用引用类型的RegExp
正则表达式是一种强大的文本处理工具,可以在前端开发中实现许多高效、灵活的文本操作。JavaScript 中的 RegExp 对象给我们提供了一个简单而强大的方式来匹配和搜索字符串。在本文中,我们将深入探讨 JavaScript 正则表达式对象,并介绍其中一些常用的引用类型。
90 0
|
JavaScript 前端开发
《JavaScript面向对象精要》——1.6 鉴别引用类型
对其他引用类型的鉴别则较为棘手,因为对于所有非函数的引用类型,typeof返回“object”。在处理很多不同类型的时候这帮不上什么忙。为了更方便地鉴别引用类型,可以使用JavaScript的instanceof操作符。
1298 0
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
97 2
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的小区物流配送系统附带文章源码部署视频讲解等
125 4
下一篇
无影云桌面