JavaScript高级程序设计之基本引用类型

目录
  • 1、Date
  • 2、RegExp
  • 3、原始包装类型

前言:

引用值(对象)都是某个特定的引用类型的实例对象,例如 Date类型、Function类型,RegExp 正则表达式类型等等。JavaScript内置了一些常用的引用类型给开发者使用。

1、Date

下面3个方法返回的单位为毫秒的时间戳

let t1 = Date.UTC(2020, 11, 7, 22,14)
let t2 = Date.parse("5/23/2020")
let t3 = Date.now()

parse 接收的参数格式可以为:

Date() 构造函数接收的参数有很多种,可以不接收任何参数,也可以接收时间戳,还可以是UTC函数和parse函数接收的参数

let t4 = new Date()
let t5 = new Date(2020, 11, 7)  // 月份从0开始
let t6 = new Date("5/23/2020")

Date 类型提供了相当于的函数,可自行查阅相关API

2、RegExp

JavaScript中,正则表达式使用如下方式表示

let  express = /pattern/flags;
  • g :全局模式,表示查找字符串的全部内容,而不是找到第一个匹配的内容就结束。
  • i :不区分大小写,表示在查找匹配时忽略 pattern 和字符串的大小写。
  • m :多行模式,表示查找到一行文本末尾时会继续查找。
  • u :Unicode 模式,启用 Unicode 匹配。
  • s : dotAll 模式,表示元字符 . 匹配任何字符(包括 \n 或 \r )。

除了用字面量形式表示正则表达式之外,还可以使用RegExp构造函数创建。

let p1 = /[cb]at/i

let p2 = new RegExp("[cb]at", "i")

两者等效。

RegExp对象有两个重要的方法,分别是exectest方法

let p1 = /[cb]at/i
let text = "hello cat bat nihao"

matches = p1.exec(text)

console.log(matches.index)
console.log(matches.input)
console.log(matches[0])  //cat

如果正则表达式匹配的话,返回的 matches Array数组对象, 不匹配返回的就是null。 另外 matches 还有两个额外的属性 indexinput 。 index 是匹配的其实位置。input就是要查找的字符串。 数组里面的元素其实就是正则表达式中的捕获分组。如果没有分组,第0个元素就是匹配的那个字符串。

let p1 = /([cb]a(t))/i
console.log(matches[0])  //cat
console.log(matches[1])  //cat
console.log(matches[2])  //t

test 方法返回的是布尔值,用于判断字符串是否匹配正则表达式。

let matched = /\d+/g.test("13")
console.log(matched)  //true

这里还要解释一下flag里面的那个g的作用, 现在看起来好像没什么用,看下面这个例子就能明白

let p1 = /[cb]at/gi
let text = "hello cat bat nihao"
console.log(p1.exec(text)) // ["cat", index: 6, input: "hello cat bat nihao", groups: undefined]
console.log(p1.exec(text))  //["bat", index: 10, input: "hello cat bat nihao", groups: undefined]

text 这个字符串中,其实有两处是匹配正则表达式的,但是我们调用exec的适合,matches数组里面的元素是cat,并没有bat。 当我第二次执行exec 的适合,返回的就是bat了。如果没有g,不管调用多少次,返回的都是cat。找到第一个匹配的内容就结束了。

另外,字符串提供了很多方法,接收正则表达式作为参数,可以用于正则表达式匹配,字符串替换、查找指定字符串或则分组。

3、原始包装类型

BooleanNumberString 这三个引用类型是原始类型对应的包装类型, 当在原始值身上用到某些方法时,会自动将原始值包装成对应的引用类型。比如上面字符串提供的那些方法,原始值本来是没有这些方法的,但是String类型就有。 这种机制使得原始值也能拥有对象的行为。

原始包装类型有如下特点,可以注意下:

let s1 = "hello"
s1.name = "sex"
console.log(s1.name) //undefined

为什么s1.name undefined 呢? 执行第二行代码的时候,会将s1转换为了包装类型, 执行完这行代码时,该类型的对象其实就被回收了。然后在第三行又创建了一个包装类型的对象,但是这个时候并没有name属性,所以就是undefined。 除非显示的创建一个String对象。

let s1 = "hello"
s1 = new String(s1)
s1.name = "sex"
console.log(s1.name)

对于Number, 使用 new 和 不适用 new 的区别

let value = 25
let number = Number(value)
obj = new Number(value)

console.log(typeof number)  //number
console.log(typeof obj)  //object

console.log(number instanceof Number)  //false  原始值不是任何类型的实例对象
console.log(obj instanceof Number)   //true

number 是原始值, obj Number类型的对象。

Number对象有个toFxied 方法用于将数值格式化为字符串, 用于保留指定位小数

let num = 10.007
console.log(num.toFixed(2))  //10.01

对于String,提供了非常多的操作字符串的方法,可以按照实例全部手敲一遍。

4、其他内置对象

全局作用域下面的变量,常用的一些单独的函数如evelparseIntisNaN,还有原始引用类型的构造函数 StringBooleanNumber FunctionArray都是Global的属性。但是我们没法显示的访问Global对象。另外encodeURIencodeURIComponent 在处理URL的适合非常有用。

url = "http://www.baidu.com/vue. js"
console.log(encodeURI(url))   //http://www.baidu.com/vue.%20js
console.log(encodeURIComponent(url))  // http%3A%2F%2Fwww.baidu.com%2Fvue.%20js

与之对应的解码函数是decodeURIdecodeURIComponent

在浏览器中,window对象作为了Global的代理对象,全局作用域下面的变量可以通过window对象来访问。

var name = "zhang"
console.log(window.name)
Math对象
console.log(Math.max(1,2,3,4))  // 最大值
console.log(Math.min(3,3,4))  // 最小值

console.log(Math.ceil("1.2"))  //向上取整
console.log(Math.floor(3.3))  //向下取整
console.log(Math.round(3.6))  //四舍五入取整

到此这篇关于JavaScript高级程序设计之基本引用类型的文章就介绍到这了,更多相关JavaScrip基本引用类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Javascript 关于基本类型和引用类型的个人理解

    1.基础类型 A. 基础类型有5种,Number,String,Boolean,Null,Undefined B. 基础类型没有堆的概念,堆只针对引用类型. 所有基础类型都是以key-value形式存放在栈中,其中,基础类型的值不可变,除非是重新赋值, 比如: var a = "1234"; a[0] = "k";//对值本身修改,无效 console.log(a)//1234 a = "k";//重新赋值 console.log(a)//k 2

  • JavaScript引用类型Function实例详解

    本文实例讲述了JavaScript引用类型Function.分享给大家供大家参考,具体如下: Function类型 函数是对象,函数名是指针:每个函数都是Function类型的实例.由于函数是对象,因此函数名是一个指向函数对象的指针,不会与某个函数绑定,一个函数可能会有多个名字. function getSum(a, b) { return a + b; } alert(getSum(2, 3));//5 var copy = getSum; alert(copy(2, 3));//5 getS

  • JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】

    本文实例讲述了JavaScript引用类型之基本包装类型.分享给大家供大家参考,具体如下: 为了操作基本类型值,ECDMAScript提供了3个特殊的引用类型--基本包装类型Boolean.Number和String.每当读取一个基本类型值时,后台会创建一个对应的基本包装类型的对象. var str = "Hello world"; var substr = str.substring(); 等价于 var str = new String("Hello world"

  • JavaScript引用类型Object常见用法实例分析

    本文实例讲述了JavaScript引用类型Object常见用法.分享给大家供大家参考,具体如下: 1.JavaScript数据类型 (1)基本类型 5种基本类型:Undefined.Null.Boolean.Number.String (2)引用类型 5种引用类型:Object.Array.Date.RepExp.Function (3)基本类型与引用类型的异同: 1)保存方式 基本类型是按值访问的.引用类型的值是按引用访问的,引用类型的值是保存在内存中的对象,JavaScript在操作对象时,

  • JavaScript对象内置对象,值类型和引用类型讲解

    目录 对象 对象的定义 遍历对象的成员 JS内置对象 Math对象 Date对象 数组对象 String对象 值类型和引用类型 对象 JS中的对象是属性和行为的结合体,其中属性是对象的静态特征,行为又称方法,是对象的动态特征. JavaScript中的对象主要分为三大类: 内置对象 由ES标准中定义的对象 在任何的ES的实现中都可以使用,比如Math String Number Boolean Function Object 宿主对象 由JS的运行环境提供的对象,目前来讲主要是浏览器提供的对象,

  • JavaScript 引用类型实例详解【数组、对象、严格模式等】

    本文实例讲述了JavaScript 引用类型.分享给大家供大家参考,具体如下: 数组 在ECMAScript中数组是非常常用的引用类型 ECMAScript所定义的数组和其他语言中的数组有着很大的区别 数组也是一种对象 创建数组 //方法一 var arr = new Array(); //方法二 var arr1 = []; 特点 数组即一组数据的集合 js数组更加类似java的map容器.长度可变,元素类型任意 数组长度随时可变!随时可以修改!(length属性) var arr1 = [1

  • JavaScript引用类型RegExp基本用法详解

    本文实例讲述了JavaScript引用类型RegExp基本用法.分享给大家供大家参考,具体如下: 1.正则表达式定义 三个标志:全局模式g,不区分大小写模式i,多行模式m. 1) 字面量定义 var pattern = /[fe]at/gim; 2) 构造函数定义: 接收两个参数--要匹配的字符串模式和可选的模式字符串(g,i,m). var pattern = new RegExp("[fe]at","gim"); 注意: 1) 若需要匹配的字符串中包含以下元字符

  • JavaScript引用类型Date常见用法实例分析

    本文实例讲述了JavaScript引用类型Date常见用法.分享给大家供大家参考,具体如下: Date类型使用自UTC1970年1月1日午夜(零时)开始经过的毫秒数来保存日期. 创建日期对象的方法: (1)获得当前日期和时间 var date = new Date(); (2)根据特定的日期和时间创建日期对象 传入的参数:从UTC午夜开始到该日期止经过的毫秒数.为此,提供两个方法Date.parse()和Date.UTC(). 1)Date.parse()方法:接收一个表示日期的字符串,根据这个

  • JavaScript高级程序设计之基本引用类型

    目录 1.Date 2.RegExp 3.原始包装类型 前言: 引用值(对象)都是某个特定的引用类型的实例对象,例如 Date类型.Function类型,RegExp 正则表达式类型等等.JavaScript内置了一些常用的引用类型给开发者使用. 1.Date 下面3个方法返回的单位为毫秒的时间戳 let t1 = Date.UTC(2020, 11, 7, 22,14) let t2 = Date.parse("5/23/2020") let t3 = Date.now() pars

  • JavaScript高级程序设计(第三版)学习笔记1~5章

    第2章,在html中使用JavaScript Html引入外部js脚本 <script type="text/javascript" src="test.js">两个</script>之间不应放脚本,因为并不会被执行</script> <script>标签有一个defer属性可以延迟脚本执行,但是并不保证会按脚本排列顺序执行 建议:将脚本引入放在<body>标签的所有内容之后,而不放在<head>

  • JavaScript高级程序设计(第3版)学习笔记9 js函数(下)

    再接着看函数--具有魔幻色彩的对象. 9.作为值的函数 在一般的编程语言中,如果要将函数作为值来使用,需要使用类似函数指针或者代理的方式来实现,但是在ECMAScript中,函数是一种对象,拥有一般对象具有的所有特征,除了函数可以有自己的属性和方法外,还可以做为一个引用类型的值去使用,实际上我们前面的例子中已经有过将函数作为一个对象属性的值,又比如函数也可以作为另一个函数的参数或者返回值,异步处理中的回调函数就是一个典型的用法. 复制代码 代码如下: var name = 'linjisong'

  • JavaScript高级程序设计(第3版)学习笔记7 js函数(上)

    变量类型 在说函数之前,先来说说变量类型. 1.变量:变量在本质上就是命名的内存空间. 2.变量的数据类型:就是指变量可以存储的值的数据类型,比如Number类型.Boolean类型.Object类型等,在ECMAScript中,变量的数据类型是动态的,可以在运行时改变变量的数据类型. 3.变量类型:是指变量本身的类型,在ECMAScript中,变量类型就只有两种:值类型和引用类型.当变量的数据类型是简单数据类型时,变量类型就是值类型,当变量的数据类型是对象类型时,变量类型就是引用类型.在不引起

  • JavaScript高级程序设计 读书笔记之八 Function类及闭包

    Function类 定义 Function类可以表示开发者定义的任何函数,用Function类直接创建函数的语法如下: var function_name=new Function(agrument1,agrument2,...,argumentN,function_body); 每个argument都是一个参数,最后一个参数是函数主体(要执行的代码). 示例: 复制代码 代码如下: function sayHi(sName,sMessage){ alert("Hello "+sNam

  • javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)

    关于javascript中类的继承可以参考阮一峰的Blog<Javascript继承机制的设计思想>,说的很透. 一.在javascript中实例化遇到的问题: 下面用<javascript高级程序设计>中的例子来做说明,假如现在定义了一个car的对象,它是Object类的实例.像下面这样的: 复制代码 代码如下: var oCar=new Object(); oCar.color = "red"; oCar.doors = 4; oCar.mpg = 23;

  • JavaScript高级程序设计(第3版)学习笔记6 初识js对象

    在房子里面可以放你想放的任意事物--如果你有足够的美学造诣,你甚至可以弄一个房中房试试--当然,为了方便管理,我们会给房子里存放的所有事物都会取上一个不重复的名字,比如医药房间里的各种药品名称.在ECMAScript中,你可以在对象中存放任意你想放的数据,同样,我们需要给存放的数据取一个名字--也就是对象的属性名,再存放各种数据.再看看ECMA-262中对象的定义:无序属性的集合,其属性可以包含简单数据类型值.对象或者函数. 进入对象,我开始有些激动了,说实话,让我想起做这系列学习笔记的最初原因

  • JavaScript高级程序设计(第3版)学习笔记 概述

    在JavaScript面世之初,没有人会想到它会被应用的如此广泛,也远比一般人想象中的要复杂强大的多,在我自己学习的过程中,曾经有过多次震撼,只是常常没有过多久,很多美轮美奂的用法就又模糊起来,希望通过对JavaScript高级程序设计(第3版)的专题学习笔记,能够较为系统的将基础知识梳理一次,也能够将自己平常学习与工作过程中遇到的一些美妙用法记录下来,便于自己再次学习,当然,也希望可以给有需要的朋友们一些力所能及的帮助. 相关术语 先简要说一下和JavaScript相关的一些背景术语,就不详细

  • JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型

    ECMAScript是一种动态类型的语言,构建于5种简单数据类型(Undefined.Null.Boolean.Number.String)和一种复杂数据类型(Object)的基础之上.这篇文章就来复习一下简单数据类型,我会尽量从编程实践的角度来描述,下面代码运行环境为FireFox 14.0.1. 简单数据类型 简单数据类型 取值 Undefined undefined(只有一个值) Null null(只有一个值) Boolean true|false(只有两个值) Number 数值 St

  • javascript高级程序设计(第三版)学习笔记(一) 正则表达式整理

    1.创建正则表达式 第一种方式:注意这里的正则表达式不能使用单引号或者双引号,如下 var pattern1 = /[abc]/i; // 匹配第一个"a"或"b"或"c",不区分大小写 第二种方式:使用RegExp构造函数创建,该构造函数传入两个参数,都是字符串,所以需要特别注意"\"符号的转换,所有元字符(下面有讲元字符)需要双重转义,如下 复制代码 代码如下: var patt1 = new RegExp("[

随机推荐