try{
for(var i=0;i<3;i++){
if(i==2) throw new Error("i==2");
}
}catch(e){
console.error(e);
}finally{
console.log("错就错了吧");
}
全局对象,直接使用
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()) // 随机
/*定义方法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]);//没有初始化
不支持多维数组,但可以将一个数组赋给一个数组元素。
/*转型*/
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)
是一种轻量级的数据交换格式 是 JavaScript 原生格式 是类似于Map的集合
类似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()
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"}
在这个例子中,我们将所有字符串属性转成全大写形式,而其他属性则保持不变。
在 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
}
// 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(); //秒
正则表达式就是用于描述一些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
方式 一 : /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");
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘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 匹配版权符号 (?)。 |
// 手机号
/^1(3|4|5|6|7|8|9)\d{9}$/
// 中文
/[\u4e00-\u9fa5]+/
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() 方法,并对用户输入进行安全校验。