Web基础 ( 八 ) 内置对象

4.3.8.Error

try{		
    for(var i=0;i<3;i++){
        if(i==2)  throw new Error("i==2");
    }
}catch(e){
    console.error(e);
}finally{
    console.log("错就错了吧");
}

4.3.9.Math

全局对象,直接使用

console.log("Math.PI : ", Math.PI)        // 圆周率
console.log("Math.abs(-6) : ", Math.abs(-6))          // 绝对值
console.log("Math.pow(9,2) : ", Math.pow(9,2))       //求幂
console.log("Math.ceil(123.456) : ", Math.ceil(123.456))         // 向上取整
console.log("Math.floor(123.456) : ", Math.floor(123.456))        // 向下取整
console.log("Math.round(123.456) : ", Math.round(123.456))        // 四舍五入 
console.log("Math.random() : ", Math.random())       // 随机

4.3.10.Array

4.3.10.1.三种创建方法

/*定义方法1*/
var as1=new Array();
	as1[0]='abc';
	as1[1]=13;
	as1[2]=true;
	as1[3]=23.54;
	//console.log(as1.length);//数组长度	
var as2=new Array(3);//指定长度
	as2[0]='abc';
	as2[13]=13;
	//console.log(as2.length)//数组长度
	//console.log(as2[1]);//没有初始化

/*定义方法2*/
var as3=new Array('abc',13,as1);
	//console.log(as3.length);
	//console.log(as3[2][3]);

/*定义方法3*/
var as4=['abc',13,,as2];//可以有空的
	//console.log(as4.length);
	//console.log(as4[2]);//没有初始化

4.3.10.2.多维数组

不支持多维数组,但可以将一个数组赋给一个数组元素。

4.3.10.3.常见方法

/*转型*/
var as5=new Array('abc',13,null,true,undefined);
	//console.log(as5)
	//console.log(as5.toString());
	//console.log(as5.valueOf());

/* 合并join     null ,undefined  当做空字符串*/
	//console.log(as5.join());
	//console.log(as5.join('-'));//按给的参数联接

/*栈方法(先进后出)push,pop*/
	//console.log(as5.push('red',12.67));//将参数添加到数组的末尾,返回新的数组长度
	//console.log(as5.pop());//移除最后一个,并返回被移除的
	//console.log(as5.length);

/*队列方法(先进先出)shift */
	//console.log(as5.shift());//移除第一个,返回被移除的
	//console.log(as5.length);
	//console.log(as5.unshift('one'));//添加到第一个,应该可以返回数组长度,但IE中返回undefined
	//console.log(as5[0]);
		
/* 排序*/
var as6=[1,2,3,4,5,19,5];
	console.log(as6.reverse());//倒序排列
	console.log(as6.sort());//由小到大,但要注意是根据字符串的比较结果所以19在2之前
	function compare(value1,value2){
		if(value1>value2){
			return 1;
		}else if(value1<value2){
			return -1;
		}else{
			return 0;
		}
	}
	//如果只是数值类型
	function compare2(value1,value2){
			return value1-value2;
	}
	console.log(as6.sort(compare));//注意用法

/* 循环  */ 
as6.forEach(function(item){
	console.log(item);
});
/* 过滤 */
var newarr = as6.filter(function(item){
	if(item >0){
		return true ; 
	} else {
		return false ; 
	}
});
console.log(newarr);


/*创建新的数组*/
	//console.log(as1.concat());//返回一个新数组,原数组保持不变
	//console.log(as1.concat('new'));//返回一个新数组,将参数追加到末尾,原数组保持不变
	//console.log(as1.concat(['new',456]));//返回一个新数组,将数组参数联接到数组上,原数组保持不变
	//console.log(as1)

/*抽取*/
	//console.log(as1.slice(1));//抽取从参数到最后的元素返回新的数组,原数组保持不变
	//console.log(as1.slice(1,3));//抽取从第一个参数到第二个参数之前的元素返回新的数组,原数组保持不变
	//console.log(as1.length);
	//console.log(as1.slice(-4,-2));//参数为负数,用数组长度加上此参数,原数组保持不变
	//console.log(as1.slice(3,1));//前面的参数大于后面的参数,返回空字符串
	//console.log(as1);

/*替换或插入     强大*/
	//console.log(as1.splice(0,2));//删除从第一个参数开始的第二个参数多个元素,返回被删除的
	//console.log(as1)
	//console.log(as1.splice(1,2,'one',2));//插入  从第一个参数开始,先删除第二个参数个元素,然后插入后的的参数的信息,返回删除的内容
	//console.log(as1)

4.3.11.JSON

是一种轻量级的数据交换格式 是 JavaScript 原生格式 是类似于Map的集合

4.3.11.1.格式

类似Map {key:value}
类似描述对象 属性之间用逗号“,”相格 {key:value, key:value}
数组[] {key: [value1,value2,value3]} 或者 [{key:value}, {key:value}, {key:value}]
下标从0开始

person = {
    name: '赵小四',
    sex: '男',
    friends: [{
        name: '王小二',
        age: 18
    }, {
        name: '李小三',
        age: 22
    }],
    info: function() {
        document.writeln("姓名:" + this.name + ", 性别:" + this.sex)
    }
}
console.log(person.friends[0].name)
person.info()

4.3.11.2.stringify()

JSON.stringify() 方法用于将一个 JavaScript 对象转换为 JSON 字符串。

JSON.stringify(obj, replacer?, space?)

obj 参数是要转换为 JSON 字符串的对象;

replacer 参数是可选的,可以是一个函数或一个数组,用于控制转换过程中要排除哪些属性或如何转换属性值,详见下面的介绍;

space 参数也是可选的,用于控制输出的缩进和空格,可以是一个数字或字符串。

例如,以下代码将一个对象转换为 JSON 字符串,并将结果输出到控制台:

let obj = { name: "John", age: 30, city: "New York" };
let jsonString = JSON.stringify(obj); 
console.log(jsonString);

输出结果为:

{"name":"John","age":30,"city":"New York"}

需要注意的是,只有可序列化的值才能被转换为 JSON 字符串。如果对象中存在需要转换的非法值,如 undefined、任意的函数以及 Symbol 类型的属性,则这些属性会被省略不计。

另外,replacer 参数可以是一个函数或一个数组。如果是一个数组,则数组中只包含要包含的属性名,例如:

let obj = { name: "John", age: 30, city: "New York" };
let jsonString = JSON.stringify(obj, ["name", "age"]); 
console.log(jsonString);

输出结果为:

{"name":"John","age":30}

如果 replacer 是一个函数,则该函数接收两个参数:属性名和属性值。函数应该返回一个新的值,指示如何序列化属性。例如:

let obj = { name: "John", age: 30, city: "New York" };
let jsonString = JSON.stringify(obj, (key, value) => {
  if (typeof value === 'string') {
    return value.toUpperCase();
  }
  return value;
});
console.log(jsonString);

输出结果为:

{"name":"JOHN","age":30,"city":"NEW YORK"}

在这个例子中,我们将所有字符串属性转成全大写形式,而其他属性则保持不变。

4.3.11.3.parse()

在 JavaScript 中,JSON.parse() 方法用于将一个 JSON 字符串转换为相应的 JavaScript 对象。JSON.parse() 的基本语法如下:

JSON.parse(text, reviver?)

text 参数是要转换为 JavaScript 对象的 JSON 字符串;

reviver 参数是可选的,可以是一个函数,用于对转换后的对象进行进一步处理,详见下面的介绍。

例如,以下代码将一个 JSON 字符串转换为 JavaScript 对象:

let jsonString = '{"name":"John","age":30,"city":"New York"}';
let obj = JSON.parse(jsonString); 
console.log(obj);

输出结果为:

{ name: "John", age: 30, city: "New York" }

需要注意的是,JSON.parse() 只能将符合 JSON 规范的字符串转换为 JavaScript 对象,否则会抛出语法错误异常。例如,以下的字符串就不符合 JSON 规范:

let jsonString = '{name:"John", age:30, city:"New York"}';
let obj = JSON.parse(jsonString); // 抛出语法错误异常

另外,如果字符串中存在日期、函数、正则表达式等 JavaScript 中独有的数据类型,或者属性值为 undefined,则不能通过 JSON 来正确地表示。在这种情况下,可以使用 reviver 函数进行进一步处理。例如:

let jsonString = '{"name":"John","age":30,"birthday":"1980-01-01","foo":undefined}';
let obj = JSON.parse(jsonString, (key, value) => {
  if (key === 'birthday') {
    return new Date(value);
  } else if (key === 'foo') {
    return null;
  }
  return value;
});
console.log(obj);

在这个例子中,我们使用 reviver 函数将字符串格式的生日信息转换为 JavaScript 中的日期类型,并将 undefined 类型转换为 null。输出结果为:

{
  name: "John",
  age: 30,
  birthday: Date("1980-01-01T00:00:00.000Z"),
  foo: null
}

4.3.12.Date

// UTC   国际协调时间

//时间日期
var now = new Date();
//console.log(now);
var d2 = new Date(Date.parse('6/9/2011'));//指定时间,格式要注意   月/日/年  ,格式取值不对不同的浏览器处理方法不同
//console.log(d2)
var d3 = new Date('6/9/2011');//指定时间,格式要注意   月/日/年    格式取值不对不同的浏览器处理方法不同
//console.log(d3)
var d4 = new Date(Date.UTC(2011,10,14,8,30,0));//年,月(从0开始),日,时(0~23),分,秒
//console.log(d4);
var d5 = new Date(2011,10,14,8,30,0);//年,月(从0开始),日,时(0~23),分,秒
//console.log(d5);


var now = new Date();
var timeValue = now.getFullYear();	//年
var months = now.getMonth()+1;    //月
var days = now.getDate();			//日
var weeks = now.getDay();				// 星期
var hours = now.getHours();			//小时
var minutes = now.getMinutes();		//分钟	
var seconds = now.getSeconds();	   //秒

4.3.13.RegExp 正则

正则表达式就是用于描述一些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

4.3.13.1.两种定义方式

方式 一 : /pattern/attr

pattern : 规则描述

attr : 属性
g global全局的,不只是第一个
i case-insensitive 不区分大小写
m multiline 文本末尾后是否继续

var myRegExp=/^[0-9]*$/g;

​ 方式 二 : new RegExp(pattern, attributes);

var myRegExp2=new   RegExp("^[0-9]*$""g");

4.3.13.2.常用规则

字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。‘\n’ 匹配一个换行符。序列 ‘\’ 匹配 “” 而 “(” 则匹配 “(”。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,‘zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,‘o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
. 匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]’ 的模式。
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 ‘(’ 或 ‘)’。
(?:pattern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,‘Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000” 中的 “Windows” ,但不能匹配 “Windows 3.1” 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern) 负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如’Windows (?!95|98|NT|2000)’ 能匹配 “Windows 3.1” 中的 “Windows”,但不能匹配 “Windows 2000” 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,‘z|food’ 能匹配 “z” 或 “food”。‘(z|f)ood’ 则匹配 “zood” 或 “food”。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, ‘[abc]’ 可以匹配 “plain” 中的 ‘a’。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]’ 可以匹配 “plain” 中的’p’。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,‘[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,‘[^a-z]’ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B 匹配非单词边界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\cx 匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]'。
\W 匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]’。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,‘\x41’ 匹配 “A”。‘\x041’ 则等价于 ‘\x04’ & “1”。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,‘(.)\1’ 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

4.3.13.3.常用正则

// 手机号  
/^1(3|4|5|6|7|8|9)\d{9}$/

// 中文
/[\u4e00-\u9fa5]+/

4.3.14.eval()

eval() 方法是一个全局函数,它将接受一个字符串作为参数,并将其解析为 JavaScript 代码并运行。eval() 方法可以执行任意 JavaScript 代码,包括声明变量、定义函数、调用函数等。它通常被用于动态生成代码或执行用户输入的代码,但也容易导致安全问题。

以下是一些 eval() 方法的使用示例:

示例 1:动态生成代码

var x = 10;
var y = 20;
var code = "console.log('The sum of x and y is ' + (x+y));";
eval(code); // 输出 "The sum of x and y is 30"

在上面的示例中,我们将一段字符串作为 JavaScript 代码,用 eval() 方法来动态执行这段代码。在代码中我们定义了两个变量 x 和 y,然后将它们相加并输出到控制台上。

示例 2:执行用户输入的代码

var code = prompt("请输入一段 JavaScript 代码:");
eval(code);

在上面的示例中,我们使用 prompt() 方法来获取用户输入的 JavaScript 代码,然后使用 eval() 方法来执行这段代码。但是这样做需要非常小心,因为用户可能会输入恶意代码,导致安全问题。因此,在实际使用中应该谨慎使用 eval() 方法,并对用户输入进行安全校验。

你可能感兴趣的:(web基础,javascript,前端,javascript,开发语言)