前端进化笔记-JavaScript(四)
生活想要将我活埋,怎料我是一颗种子
基本引用类型
对象是引用类型的实例:new后面跟一个构造函数就创建了一个新对象,例如
let now = new Date();
,这样就创建了一个Date对象.
Date类型
方法
- Date.parse( ):根据传入的参数返回毫秒数。参数为有固定格式的表示日期的字符串。
- Date.UTC( ):同parse方法类似,但是传入参数有所不同。
- Date.now( ):返回方法执行时的毫秒数。这个方法感觉比上面两种方法有用的多。
- 继承的方法:
- toLocaleString( ):输出本地时间字符串
- toString( ):和上面的方法输出逐渐趋于一致(字符串)
- valueOf( ):返回毫秒数(数值)
- Date类型还有很多关于日期的方法,他们可以返回格式化日期的字符串或者只返回特定的年份月份等。
RegExp类型
正则表达式的基本形式JavaScript都基本支持。
let p1 = /[bc]at/i;
和let p2 = new RegExp("[bc]at","i");
两种方式定义的正则表达式一样。
值得注意的是,对于正则表达式中的元字符需要用转义字符\才能表示,而通过构造函数创建表达式时第一个参数为字符串,这意味着如果字符串中有转义字符则还需要在转义字符再前加一个转义字符。
实例的属性
除了用布尔值表示是否设置了某标记的属性之外(如global:表示是否设置了g标记),还有三个特殊的属性。
- lastIndex:整数,表示源字符串下一次搜索的开始位置,始终从0开始
- sourse:正则表达式的字面量字符串(没有斜杠)
- flags:标记字符串(没有斜杠)
实例的方法
什么是捕获组?
模式中被()括起来的部分。
主要方法为exec( )。只接收一个参数,即将应用模式(就是正则表达式如p1,p2)的字符串。找到匹配项就返回一个数组,否则返回null。该数组额外有两个属性:index和input。index是字符串匹配模式的起始位置,input表示要查找的字符串(参数)。数组的第一项是匹配整个模式的字符串(最大的),其他项则是对应匹配成功的捕获组。
let t = 'mom and dad and baby';
let p = /mom( and dad( and baby)?)?/gi;
let m = p.exec(t);
console.log(m[0]);//"mom and dad and baby" t应用模式p后得到的第一项是整个字符串
console.log(m[1]);//" and dad and baby" 第一个捕获组( and dad ( and baby)?)其中" and baby"可以有也可以无。当t = 'mom and dad'时值为 and dad
console.log(m[2]);//" and baby" 第二个捕获组为( and baby)
正则表达式实例的另一个方法是test(),接收一个字符串参数。如果匹配返回true,多用于if语句中,适合只需要知道是否匹配,不需要知道匹配内容的情况。
除了上面两个比较常用的方法之外,正则表达式继承的toLocaleString()和toString()方法都返回表达式的字面量形式;而valueOf()方法返回的是表达式本身。
构造函数的属性
- input($_):最后搜索的字符串
- lastMatch($&):最后匹配的文本
- lastParen($+):最后匹配的捕获组
- leftContext:($`):input字符串出现在lastMactch前面的文本
- rightContext:($'):input字符串出现在lastMactch后面的文本
还有$1-$9用来表示第一到第九个匹配组。这些属性输出大多是字符串,只是对匹配过程中一些比较重要的部分进行代表,方便使用。
原始值包装类型
啥叫原始值包装类型?按照我的理解,就是给int string等数据类型绑定一些方法,从而方便我们操作。
当你用let创建一个变量之后,后台就会同时创建一个该变量数据类型的实例,从而使变量获得了方法。事实上,变量可以读也可以写,当需要读的时候才会创建实例,并且在执行完操作后立刻销毁。从而使原始值拥有对象的能力。
引用类型和原始值包装类型的主要区别在于对象的生命周期。通过new创建的实例会在离开作用域时销毁,而自动创建的原始值包装对象只存在于访问他的那段代码。
虽然原始值有了对象的能力,但那是很暂时的。因此我们不能显式的给原始值添加属性,因为这样做虽然成功的创建了实例也给其添加的属性,但是在这行代码结束之后,该实例就被销毁了,所以我们无论如何也拿不到我们曾经创建的属性(即使他被成功创建了)。
Boolean
Boolean是对应布尔值的引用类型。let bo = new Boolean(true);
这样就创建了一个布尔值实例。
但是 强烈建议不要使用Boolean
Number
Number除了一些格式化数字的方法外。ES6新增了isInteger()方法,用来判断是否为整数。值得注意的是console.log(Number.isInteger(1.00));//结果为true
。isSafeInteger()方法可以鉴别整数是否在IEEE754标准范围内。
String
String对应的是字符串,每一个String对象都有一个length属性。charAt()方法返回给定参数位置的字符,js提供了大量与字符串编码有关的方法,这里就不深入探讨了。除此之外,还提供了很多对字符串值进行操作的方法。
字符串操作方法
concat()方法用来拼接字符串,然后更常用的拼接字符串方法是使用'+'。
slice(),substr()和substring()都是从字符串提取子字符串的方法,他们都接收一个或两个参数。slice()和substring()第一个参数表示字符串开始位置,第二个则表示结束位置,而substr()第二个参数表示子字符串长度。
字符串位置方法
indexOf()和lastIndexOf()都用于在字符串中查找子字符串,区别是前一个方法从头开始找,后一个方法从尾开始找。除了第一个参数表示要查找的字符串外,还有第二个参数表示字符串开始的位置。
字符串包含方法
- includes()和startsWith()的第二个参数都表示开始搜索的位置。
- endsWith()的第二个参数表示从这个位置开始往前搜索。
除此之外indexOf()方法应该也可以判断是否包含问题,包含则返回位置
trim()方法去除字符串所有空格,trimLeft()和trimRight()则用来去除前后的空格。
repeat()方法将字符串重复多次拼接起来返回全新的一个字符串。
字符串的迭代与解构
虽然迭代的概念本章没有涉及,但是我们也可以提前了解一下。大体上就是一个@@iterator方法,通过这个方法可以手动的去获得字符串的每一个字符。当然如果使用for-of循环则会自动使用该方法去遍历这个字符串。同时可以借助这个迭代器进行解构。console.log([...msg]); //输出msg中每个字符组成的数组
单体内置对象
内置对象:与宿主环境无关,在程序运行前就已经存在的对象
Global
Global对象是一种兜底对象,任何在全局作用域中定义的变量和函数都会变成它的属性和方法。它还有其他的一些方法。
URL编码方法
encodeURI()和encodeURIComponent()用来规范URI便于被浏览器识别。区别在于前者只会编码不属于URL组件的特殊字符(冒号,斜杠等)而后者会编码所有非标准字符。相对的有decodeURI()和decodeURIComponent()来分别进行解码。
eval()方法
它可以执行JavaScript代码eval("console.log('hi')");//与console.log('hi')等价
,而且eval()函数中还可以获得当前执行上下文的变量。这个强大的方法也包含了可怕的危险。一个可以执行所有代码的函数是无所不能的。
通过window对象访问Global
let color = "red";
console.log(window.color)//获得全局变量color
除此之外,还有一种获得Global的方法
let global = function(){
return this;
}();
Math
这个对象上包含了很多方便计算的属性和方法。
- min()和max()用于确定最大最小值,他们都接收多个参数,并返回这些参数中的最值,这样就局限了我们的使用。对于数组,我们可以通过扩展操作符方便我们使用。
let arr = [1,2,3,4,5,6,7,9];
let max = Math.max(...arr);
- random()方法返回一个0-1之间的随机数(不包括1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律