还没有学习前5个Js基本对象?👉点我前往学习
6.RegExp正则表达式对象
**正则表达式:**定义字符串的组成规则
- 单个字符规则
js
[规则]:表示对单个字符的限制
[a]//表示字符串必须是a
[ab]//表示字符串为a或b
[a-bA-Z0-9_]//表示单个字符可以是a~b A~Z 0~9 _
* 特殊符号代表特殊含义的单个字符:
\d:单个数字字符 [0-9]
\w:单个单词字符[a-zA-Z0-9_]
- 量词的规则
js
?:表示出现0次或1次
*:表示出现0次或多次
+:出现1次或多次
{m,n}:表示 m<= 数量 <= n
* m如果缺省: {,n}:最多n次
* n如果缺省:{m,} 最少m次
- 开始与结束
js
以^开始,以$结束
- 正则对象的创建
js
//方法一:
let reg = new RegExp("正则表达式");
//方法二:
let reg = /正则表达式/
例子:
let regExp = new RegExp("\\w{6,12}");
let regExp2 = /^\w{6,12}$/;
- 正则对象的方法
js
正则对象.text(字符串);//用于检验正则表达式是否合法,返回true或者false
8.Global全局对象
全局对象,这个Global中封装的方法不需要对象就可以直接调用: 方法名()
eval("字符串")函数
js
功能:将eval中的字符串参数作为脚本代码去执行
isFinite(数字)函数
检查某个值是否为有穷大的数。
➢参数为有限值,返回值为ture。
➢参数为非数字或者正、负无穷大,返回值为false。
isNaN()函数
js
检查某个值是否为数字(NaN与任何数逻辑运算均为NaN)
➢参数为数字,返回值为false 。
➢参数为非数字,返回值为ture 。
parseInt(任意参数,[转换的进制])函数
js
➢参数第一个字符为数字字符串,返回值为number 。
➢参数为非数字,返回值为NAN
➢将参数为非数字前的数字转成NaN返回
encodeURI():url编码
decodeURI():url解码
encodeURIComponent():url编码,编码的字符更多
decodeURIComponent():url解码
js
根据meta标签中charset编码方式对文字进行编码
decodeURI对服务器发送的内容进行解码
9.Object对象
- 定义格式
js
//方法一:在对象内部定义方法和属性
let 对象名 = {
//定义属性
属性名1:属性值1,
属性名2:属性值2,
//定义方法
/*1.可以采用匿名函数定义方法*/
函数名称:function(形参列表){}
/*2.简化的定义方式*/
函数名称(形参列表){}
}
//方法二:在对象外部定义属性和方法
let 属性名1 = 属性值;
let 属性名2 = 属性值;
let 方法名 = function(形参列表){};
let 对象名 = {属性名1,属性名2,方法名};
- get和set方法
js
let stu = {
name: null,
get name() {
console.log("进入了get");
return this._name;
},
set name(name) {
console.log("进入了set");
this._name = name;
}
}
//在定义get和set方法的,在修改name属性的时候会自动调用get和set方法
stu.name = "yhw"
console.log(stu.name)
//在实践中,开发者经常使用_开头来表示某个属性是私有的,以便区分公共属性。这是一种约定俗成的做法,并没有强制规定。将name改为_name也可正常运行
- 属性的增删改
js 的对象,它的属性和方法可以随时加减
js
let stu = {name:'张三'};
// 添加属性
stu.age = 18;
// 删除属性
delete stu.age;
// 添加方法
stu.study = function() {
console.log(this.name + "在学习");
}
// 添加get和set方法:需要借助 Object.definePropery
Object.defineProperty(对象名, "属性名", {
//因为Object.definePropery方法已经定义了属性名,所以,无需再次在get和set方法定义属性名
get(){
return this.属性名;
},
set(a){
this.属性名 = a;
}
});
- this关键字
js 中的 this 也是隐式参数,但它与函数运行时上下文相关
js
//情况一:当单独定义一个函数,使用this关键字全局对象 window被当作了this
function study() {
console.log(this.name);
}//此时this.name为空字符串(==window.name)
//情况二:如果作为对象的方法,this表示的是对象本身
let stu = {
name:"lisi";
study() {
console.log(this.name);
}
}//此时this.name为lisi(==stu.name)
//情况三:动态指定this
let stu = {name:"zhangsan"};
study.call(stu);//通过call指定study函数内的this为stu对象,因此会输出zhangsan
this关键字的一种易错情况
js
但是可以通过箭头函数解决这一问题,在**箭头函数**内出现的 this和它外层 this相同
let stu = {
name: "小花",
friends: ["小白","小黑","小明"],
play() {
this.friends.forEach(e => {
console.log(this.name + "与" + e + "在玩耍");
})
}
}
- 继承:原型继承
js
let father = {
f1: '父属性',
m1: function() {
console.log("父方法");
}
}
let son = Object.create(father);
console.log(son.f1); // 打印 父属性
son.m1(); // 打印 父方法
- father 是父对象,son 去调用 .m1 或 .f1 时,自身对象没有,就到父对象找
- son 自己可以添加自己的属性和方法
- son 里有特殊属性
__proto__
代表它的父对象,js 术语: son 的原型对象 - 不同浏览器对打印 son 的
__proto__
属性时显示不同- Edge 打印 console.dir(son) 显示
[[Prototype]]
- Firefox 打印 console.dir(son) 显示
<prototype>
- Edge 打印 console.dir(son) 显示
出于方便的原因,js 又提供了一种基于函数的原型继承
函数职责
负责创建子对象,给子对象提供属性、方法,功能上相当于构造方法
函数有个特殊的属性 prototype,它就是函数创建的子对象的父对象
**注意!**名字有差异,这个属性的作用就是为新对象提供原型
js
function cons(f2) {
// 创建子对象(this), 给子对象提供属性和方法
this.f2 = f2;
this.m2 = function () {
console.log("子方法");
}
}
// cons.prototype 就是父对象
cons.prototype.f1 = "父属性";
cons.prototype.m1 = function() {
console.log("父方法");
}
配合 new 关键字,创建子对象
js
let son = new cons("子属性")
子对象的 __proto__
就是函数的 prototype
属性
10.JSON对象
概念:JavaScript Object Notation, Javascript 对象标记法,是通过JavsScript对象标记法书写的文本
**作用:**多用于数据载体,在网络中进行数据传输
格式:
json
var 变量名 = '{"key1":value1, "key2":value2}';
value的数据类型为:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true or false)
数组(在方括号中)
对象(在花括号中)
null
方法:
- 将JSON转换为JS对象
js
var obj = JSON.parse(userString);
- 将JS对象转换为JSON字符串
js
var jsonStr = JSON.stringify(jsObject);
- json 中只能有 null、true|false、数字、字符串(只有双引号)、对象、数组
- json 中不能有除以上的其它 js 对象的特性,如方法等
- json 中的属性必须用双引号引起来