函数
1、每个函数对象在创建时随带有一个prototype属性,它的值是一个拥有constructor属性且值为该函数的对象;这和隐藏链接到Function.prototype完全不同。到底有什么不同呢,且看下次分解
2、在js中函数有四种调用模式:方法调用模式,函数调用模式,构造器调用模式和apply调用模式;
如果在一个函数前面带上new来调用,那么将创建一个隐藏连接到该函数的prototype成员的新对象,同时this将会绑定到那个新对象上;
通过new前缀的方式来调用一个函数,且该函数的返回值不是一个对象,则返回this(该新对象);
正则表达式
1、捕获型
括号匹配:(x),匹配x并记住这个匹配
比如在模式/(for) (bar) \1 \2/中,(for)和(bar)匹配字符串"for bar for bar"中的第一个和第二个单词,\1和\2匹配最后两个单词;
var reg = /(foo) (bar) \1 \2/;
var result = reg.exec("foo bar foo bar");
result is
["foo bar foo bar", "foo", "bar"]
var reg = /(foo) (bar)/;
var result = reg.exec("foo bar foo bar");
undefined
result
["foo bar", "foo", "bar"]
2、非捕获型
(?:x):匹配x但不记住该匹配
var reg = /(?:foo) (?:bar)/;
var result = reg.exec("foo bar foo bar");
undefined
result
["foo bar"]
可以看到,结果少了两项:match1和match2
3、向前正向匹配
x(?=y):表示x后面紧跟着y,但y不在匹配结果中;匹配后,文本将倒回到它开始的地方,实际上并不匹配任何东西
var reg = /foo(?=bar)/;
var result = reg.exec("foobar foobar");
undefined
result
["foo"]
4、向前负向匹配
x(?!y):x后面紧跟着的不是y;类似于向前正向匹配,但只有当它匹配失败时它才进行匹配;
var result = /\d+(?!\.)/.exec("3.141")
undefined
result
["141"]
可以看到y不在匹配结果中
5、x|y:匹配x或y
var result = /green|red/.exec('red apple')
undefined
result
["red"]