Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《JavaScript 模式》读书笔记(3)— 字面量和构造函数3

《JavaScript 模式》读书笔记(3)— 字面量和构造函数3

作者头像
全栈程序员站长
发布于 2022-07-21 00:29:08
发布于 2022-07-21 00:29:08
56600
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

  这是字面量和构造函数的最后一篇内容,其中包括了JSON、正则表达式字面量,基本值类型包装器等知识点。也是十分重要的哦。

五、JSON

JSON是指JavaScript对象表示以及数据传输格式。它是一种轻量级数据交换格式,且可以很方便地用于多种语言,尤其是在JavaScript中。实际上,对于JSON而言,只是一个数组和对象字面量表示方法的组合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"name":"value","some":[1,2,3]}

  JSON和文字对象之间唯一的区别,就是在JSON中,属性名称需要包装在引号中才能成为合法的JSON。而在对象字面量中,仅当属性名称不是有效的标识符时才会需要引号,比如:字符之间有空格{“first name”:””Dave}。

  此外,JSON字符串中,不能使用函数或正则表达式字面量。

使用JSON

注意,并不推荐盲目使用eval()对任意JSON字符串进行求值,其原因在于安全性的影响。如果使用JSON.parse()方法解析字符串,其安全性会更好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 一个输入JSON字符串
var jstr = '{"name":"value","some":[1,2,3]}';

// 反模式
var data = eval('(' + jstr + ')');

// 优先使用的方法
var data = JSON.parse(jstr);
console.log(data.name); // value

  与JSON.parse()相对的方法是JSON.stringify()。它可以将任意的对象或数组序列化为一个JSON字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var dog = {
    name:'Fido',
    dob:new Date(),
    legs:[1,2,3,4]
};
var jsonstr = JSON.stringify(dog);

六、正则表达式字面量

JavaScript中的正则表达式也是对象,可以用两种方法创建:

    1、使用new RegExp()构造函数。

    2、使用正则表达式字面量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 正则表达式字面量
var re = /\\/gm;

// 构造函数
var re = new RegExp('\\\\','gm');

  正如上面的代码,字面量表示法更加简短,并且不需要使用“类”的构造函数方式思考。优先选择字面量表示法创建正则表达式。

  此外,在使用构造函数时,不仅需要转义引号,还需要双反斜杠。如上代码,这里需要四个反斜杠才能匹配单个反斜杠。使得其难以阅读和修改。

正则表达式字面量语法

正则表达式字面量表示法使用了斜杠(分隔号“/”)来包装用于匹配的正则表达式模式。在第二个斜杠之后,可以将该模式修改为不加引号的字母形式:

  • g——全局匹配
  • m——多行
  • i——大小写敏感匹配

  模式修改器可以允许任何顺序或者组合方式出现:var re = /pattern/gmi;

  还有一个要注意的是,在ES5之前,字面量在解析时只有一次创建了一个对象。也就是说,如果在一个循环中创建了相同的正则表达式,那么后面返回的对象与前面创建的对象相同,并且所有的属性都将被设置为第一次的值。这种行为已经在ES5中得到了改变,并且字面量会创建新的对象。

  最后要说明的是,调用RegExp()时不使用new的行为与使用new的行为时相同的。

七、基本值类型包装器

JavaScript有五个基本的值类型:数字、字符串、布尔、null和undefined。除了null和undefined以外,其他三个具有所谓的基本包装对象。可以使用内置构造函数Number(),String()和Boolean()创建包装对象。

  为了说明基本(primitive)数字和数字对象(object)之间的差异,请看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 一个基本数值
var n = 100;
console.log(typeof n);//输出"number"

// 一个数值Number对象
var nobj = new Number(100);
console.log(typeof nobj);// 输出"object"

  包装对象包含了一些有用的属性和方法。比如,数字对象具有形如toFixed()和toExponential()的方法。字符串对象具有substring()、charAt()、toLowerCase()等方法以及length属性。与基本值类型相比较而言,这些包装对象的方法用起来十分方便,这也是用这种方法创建对象的一个很好的理由。但是这些方法在基本值类型上也能够起作用只要调用这些方法,基本值类型就可以在后台被临时转换为一个对象,并且表现的犹如一个对象。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 用来作为对象基本字符串
var s = "hello";
console.log(s.toUpperCase());// "HELLO"

// 值本身可以作为一个对象
"monkey".slice(3,6); // "key"

// 与数值的方法相同
(22 / 7).toPrecision(3); // "3.14"

  由于基本值类型也可以充当对象,只要需要它们这样做,不过通常并没有理由去使用更为冗长的包装构造函数。很显然,比如当可以简单地使用“hi”时,就不必编写“new String(“hi”);”这样冗长的语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 避免使用以下结构:
var s = new String("my string");
var n = new Number(101);
var b = new Boolean(true);

// 更好且更加简单的语句
var s = "my string";
var n = 101;
var b = true;

  通常使用包装对象的原因之一是您有扩充值以及持久保存状态的需要。这是由于基本值类型并不是对象,他们不可能扩充属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 基本字符串
var greet = "Hello there";

// 为了使用split()方法,基本数据类型被转换成对象
greet.split(' ')[0]; // "Hello"

// 试图增加一个原始数据类型并不会导致错误
greet.smile = true;

// 但是它并不会实际运行
typeof greet.smile; // "undefined"

  上面的代码中,greet只能被临时转换成对象,以使得该方法/属性可以访问,且运行时不会产生错误。另一个方面,如果使用new String()来定义一个对象greet,那么对其扩充的smile属性将会按照预期运行。扩充一个字符串、数字或布尔值的情况比较少见,除非这种行为就是您所需要的,否则可能并不需要包装构造函数。

当使用时没有带new操作符时,包装构造函数将传递给它们的参数转换成一个基本类型值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typeof Number(1);// 输出“number”
typeof Number("1");// 输出“number”
typeof Number(new Number());// 输出“number”
typeof String(1);// 输出“string”
typeof Boolean(1);// 输出“boolean”

八、错误对象

JavaScript中有一些内置错误构造函数(error constructor),比如Error()、SyntaxError()、TypeError()以及其他,这些错误构造函数都带有throw语句。通过这些错误构造函数创建的错误对象具有下列属性:

  • name:用于创建对象的构造函数的名称属性。它可以是一般的“Error”或者更为专门的构造函数,比如“RangeError”。
  • message:当创建对象时传递给构造函数的字符串。

错误对象也还有一些其他的属性,比如发生错误的行号和文件名,但这些额外属性都是浏览器扩展属性,在多个浏览器实现中并不一致,因而并不可靠。

另一方面,throw适用于任何对象,并不一定是由某个错误构造函数所创建的对象,因此可以选择抛出自己的对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function genericErrorHandler() {
    console.log("错误处理中....")
}
try {
    throw {
        name: "MyErrortype",//自定义错误类型
        message: "oops",
        extra: "This is rather embarrassing",
        remedy: genericErrorHandler // 指定应该处理该错误的函数
    };
} catch (e) {
    // 通知用户
    alert(e.message);//输出"oops"
    // 优美的处理错误
    e.remedy(); // 调用函数genericErrorHandler()
}

  错误构造函数以函数的形式调用(不带new)时,其表现行为与构造函数(带new)相同,并且返回同一个错误对象。

  我们这篇文章整体的内容就结束了,我们主要学习了对象字面量、数组字面量、正则表达式字面量、以及构造函数和new、还有一些其他的内置构造函数比如不建议使用的String()、Number()、Boolean()等,此外还讨论了多种不同的Error()构造函数。

  注意:在一般情况下,除了Date()构造函数,很少需要使用其他内置构造函数。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124394.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年3月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaScript模式 读书笔记二
可以使用自己的构造函数,或使用一些类似Object(),Date(),String()的内置构造函数创建对象
lilugirl
2019/05/26
4940
《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
  新的篇章开始了,本章开始,所有的内容都是十分有价值和意义的。本章主要的内容包括对象字面量、构造函数、数组字面量、正则字面量、基本值类型字面量以及JSON等。在大家的工作和实际应用中也有一定的指导意义。
zaking
2020/03/25
6290
JavaScript 模式》读书笔记(3)— 字面量和构造函数2
  上一篇啊,我们聊了聊字面量对象和自定义构造函数。这一篇,我们继续,来聊聊new和数组字面量。
zaking
2020/03/25
5190
关于JS字面量及其容易忽略的12个小问题
JS这种语言一不小心就会写错。为什么前端技术专家工资那么高,可能要解决的疑难杂症最多吧。
LIYI
2019/09/02
3.2K0
关于JS字面量及其容易忽略的12个小问题
Javascript正则构造函数与正则表达字面量&&常用正则表达式
  本文不讨论正则表达式入门,即如何使用正则匹配。讨论的是两种创建正则表达式的优劣和一些细节,最后给出一些常用正则匹配表达式。   Javascript中的正则表达式也是对象,我们可以使用两种方法创建正则表达式: 使用new RegExp()构造函数 使用正则表达字面量   先说结果,使用正则表达字面量的效率更高。   下面的示例代码演示了两种可用于创建正则表达式以匹配反斜杠的方法: 1 //正则表达字面量 2 var re = /\\/gm; 3 4 //正则构造函数 5 var reg =
Sb_Coco
2018/05/28
1.2K0
【前端】JavaScript中的字面量概念与应用详解
字面量(Literal) 是指代码中直接表示固定值的语法结构。例如,在代码 let number = 42; 中,42 就是一个数字字面量。字面量并不依赖于变量或函数的运行结果,而是代码中明确的 常量值。字面量可以用于多种数据类型,包括 数字、字符串、布尔值、数组、对象 等,从而涵盖了广泛的 数据表示需求。
CSDN-Z
2025/06/02
840
【前端】JavaScript中的字面量概念与应用详解
javascript语言精粹 读书笔记
这是我目前度过最好的js方面的书,小而精,没有一句废话全是精华。想要全面理解javascript,这本书必读。
lilugirl
2019/05/26
6530
JavaScript知识盲区整理
window是一个全局对象,其实就是相当于那个对象调用这个函数,那么这个函数里面的隐式参数this就是当前调用这个函数的对象
大忽悠爱学习
2021/11/15
5560
JavaScript基础教程
JavaScript是目前所有主流浏览器上唯一支持的脚本语言,这也是早期JavaScript的唯一用途。其主要作用是在不与服务器交互的情况下修改HTML页面内容,因此其最关键的部分是DOM(文档对象模型),也就是HTML元素的结构。通过Ajax可以使HTML页面通过JavaScript,在不重新加载页面的情况下从服务器上获取数据并显示,大幅提高用户体验。通过JavaScript,使Web页面发展成胖客户端成为可能。
Abalone
2022/07/14
2.8K0
JavaScript基础教程
深入理解面向对象中的原始类型和引用类型
我们先前学过的数据类型可以划分成两类:原始类型和引用类型。原始类型的数据都是一些比较简单数据,比如字符串,数字等。引用类型的数据稍微复杂一点,比如对象。
小周sir
2019/09/23
1.5K0
深入理解面向对象中的原始类型和引用类型
JavaScript 模式》读书笔记(4)— 函数1
  从这篇开始,我们会用很长的章节来讨论函数,这个JavaScript中最重要,也是最基本的技能。本章中,我们会区分函数表达式与函数声明,并且还会学习到局部作用域和变量声明提升的工作原理。以及大量对API、代码初始化、程序性能等有帮助的模式。
zaking
2020/03/26
4190
【Java 进阶篇】JavaScript 数据类型详解
JavaScript是一种弱类型脚本语言,具有动态类型。这意味着JavaScript中的变量可以容纳不同类型的数据,并且它们的类型可以在运行时更改。在本文中,我们将深入探讨JavaScript中的数据类型,包括原始数据类型和引用数据类型,以及如何使用它们创建变量和操作数据。
繁依Fanyi
2023/10/12
2530
【Java 进阶篇】JavaScript 数据类型详解
javascrip菜鸟
JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。
zhangjiqun
2024/12/16
2390
javascrip菜鸟
JavaScript 高级程序设计(第 4 版)- 基本引用类型
引用值(或者对象)是某个特定引用类型的实例。引用类型是把数据和功能组织到一起的结构,常被误称为“类”。从技术上讲JS是一门面向对象语言,但ECMAScript缺少传统的面向对象编程语言所具备的某些基本结构,包括类和接口。引用类型有时也被称为对象定义,因其描述了自己的对象应有的属性和方法。 对象被认为是某个特定引用类型的实例。新对象通过使用new操作符后跟一个构造函数来创建。 # Date Date类型将日期保存为自协调世界时(UTC, Universal Time Coordinate)时间1970年1月1
Cellinlab
2023/05/17
8420
JavaScript 高级程序设计(第 4 版)- 基本引用类型
JavaScript 进阶 - 第2天
解构赋值是一种快速为变量赋值的简洁语法,本质上仍然是为变量赋值,分为数组解构、对象解构两大类型。
用户10169043
2022/11/18
1.7K0
JavaScript 权威指南第七版(GPT 重译)(四)
JavaScript 对象在第六章中有所涉及。该章将每个对象视为一组独特的属性,与其他对象不同。然而,通常有必要定义一种共享某些属性的对象类。类的成员或实例具有自己的属性来保存或定义它们的状态,但它们还具有定义其行为的方法。这些方法由类定义,并由所有实例共享。例如,想象一个名为 Complex 的类,表示并对复数执行算术运算。Complex 实例将具有保存复数的实部和虚部(状态)的属性。Complex 类将定义执行这些数字的加法和乘法(行为)的方法。
ApacheCN_飞龙
2024/03/23
5790
JavaScript 权威指南第七版(GPT 重译)(四)
重学Javascript之引用类型
对象是某个特定引用类型的实例。新对象是使用 new 操作符跟一个 构造函数来创建的。构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的,如下:
执行上下文
2022/07/26
1.3K0
深入理解JavaScript(二)
2.带有/g的正则表达式作为参数:为了安全起见,应该设置lastIndex为0(test()和exec()时)
硬核项目经理
2019/08/06
8360
前端开发JavaScript-巩固你的JavaScript
在javascript中,变量是存储信息的容器,变量存在两种类型的值,即为原始值和引用值。
达达前端
2020/04/02
3K0
前端开发JavaScript-巩固你的JavaScript
JavaScript正则表达式(Regular Expression):RegExp对象
第一部分:新建正则表达式 JavaScript中正则表达式是参照Perl 5(一门历史很悠久的语言,现在tiobe编程语言排行依然在10名左右)建立的。 新建正则表达式的方法有两种: 1.使用字面量(
用户1149564
2018/01/11
9460
JavaScript正则表达式(Regular Expression):RegExp对象
相关推荐
JavaScript模式 读书笔记二
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验