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.13.4.test 判断方法

test(str): 检查字符串 str 是否匹配正则表达式,返回布尔值。

    let phoneRegex = /^1(3|4|5|6|7|8|9)\d{9}$/
    let isPhoneValid1 = phoneRegex.test('1234');
    console.log( isPhoneValid1 )  // 输出 :  false
    
    let isPhoneValid2 = phoneRegex.test('13123456789');
    console.log( isPhoneValid2 )  // 输出 :  true
4.3.13.5.结合String对象的方法:
  • match(regex): 找到字符串中所有与正则表达式匹配的部分,并返回一个包含匹配结果的数组,如果没有匹配项则返回 null
    var matches1 = 'Some text 123'.match(/\d+/g);
    console.log(matches1)  // 输出 : ['123']


    var matches2 = "edit('repositoryId')".match(/\('(.*?)'\)/);
    console.log(matches2)  // 输出 : ["('repositoryId')", 'repositoryId', index: 4, input: "edit('repositoryId')", groups: undefined]

两个示例返回的数组结构之所以不同,是因为:

'Some text 123'.match(/\d+/g) 只匹配数字字符,不包含捕获组,所以返回数组只包含匹配的数字序列。

"edit('repositoryId')".match(/\('(.*?)'\)/) 不仅匹配被单引号包围的字符串,还包含一个捕获组来提取其中的内容。因此,返回数组除了包含完整匹配项外,还包含了捕获组捕获的结果。

  • search(regex): 查找字符串中第一个与正则表达式匹配的位置,返回匹配开始的位置索引,如果不匹配则返回 -1

        var index = 'Some text 123'.search(/\d+/);
        console.log(index)  // 输出 : 10
    
  • replace(regex, replacement): 替换字符串中第一个(或所有,如果加上标志"g")匹配正则表达式的部分,返回替换后的新字符串。

      var replacedStr1 = '123 Main St 456'.replace(/\d+/, '###');
      console.log(replacedStr1)  // 输出 : ### Main St  456
    
      var replacedStr2 = '123 Main St 456'.replace(/\d+/g, '###');
      console.log(replacedStr2)  // 输出 : ### Main St  ###
    
  • replaceAll(regex, replacement): ECMAScript 2021中新增的方法,替换字符串中所有匹配正则表达式的部分。

    var replacedAllStr = '123 Main St, 456 High Ave'.replaceAll(/\d+/, '###');
    console.log(replacedAllStr)  // 输出 : ### Main St, ### High Ave
    
  • split(regex): 根据正则表达式拆分字符串,返回一个包含子字符串的数组。

       var words = 'Hello,World'.split(/,\s*/);  // 用 ,拆分 
        console.log(words)  // 输出 : ['Hello', 'World']
    

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() 方法,并对用户输入进行安全校验。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web课件是一份专门设计用于教授Java Web开发的教学材料。 Java Web是一种基于Java语言和相关技术的Web开发技术。它结合了Java的强大功能和Web的广泛应用范围,使开发者能够构建出功能强大、安全可靠的Web应用程序。 Java Web课件通常包含以下内容: 1. 基础知识介绍:对Java Web开发的原理和基本概念进行解释和讲解,包括Java的Web开发环境和工具、Servlet和JSP的基本用法等。 2. 开发环境搭建:指导学习者如何配置Java Web开发环境,包括安装和配置Java开发工具(如Eclipse、IntelliJ IDEA等)、配置Servlet容器(如Tomcat、Jetty等)。 3. Servlet开发:介绍Servlet的工作原理和生命周期,详细讲解Servlet的编写和部署,包括处理HTTP请求和响应、使用请求参数、会话管理等。 4. JSP开发:讲解JSP的基本语法和用法,包括JSP指令、脚本和表达式等,还介绍了JSP中的内置对象和JSTL等标签库的使用。 5. 数据库访问:介绍数据库的基本概念和使用,包括使用JDBC连接数据库、执行SQL语句等。 6. MVC模式:介绍使用MVC(Model-View-Controller)模式进行Web应用程序的开发,包括设计模式、数据模型、视图和控制器等。 7. Web框架:介绍常见的Java Web框架,如Spring MVC、Struts2等,讲解框架的原理和使用方法,以及如何在项目中集成和应用这些框架。 8. 安全性和性能优化:讲解Java Web应用程序的安全性和性能优化方法,包括数据加密、会话管理、代码优化等。 Java Web课件通过理论讲解和实例演示,帮助学习者逐步理解和掌握Java Web开发的核心技术和方法。通过课件的学习,学习者可以快速入门Java Web开发,并能够独立设计、开发和部署Java Web应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值