JS学习总结
1、(1)在 JScript 中 nullundefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值 NaN (不是一个数字)。对 null 值和 undefined 值作比较总是相等的。
(2)Jscript中 typeof 运算符将报告 null 值为 Object 类型,而非类型 null。
(3)任何值为 0null、未定义或空字符串的表达式被解释为 false
(4)Undefined是一种数据类型,所以在进行类型判断时只能这样写if (typeof(x) == "undefined")
(5)要检查一个对象属性是否存在,可以使用新的 in 运算符:if ("prop" in someObject) // someObject 有属性 'prop'
2、 类型转换规则
运算
结果
数值与字符串相加
将数值强制转换为字符串。
布尔值与字符串相加
将布尔值强制转换为字符串。
数值与布尔值相加
将布尔值强制转换为数值。
3 parseInt(numString, [radix])函数,参数numString表示将要装换为数字的字符串,参数[radix]标识转换后的数字的进制可以是2-36之间的任何值。该函数返回的是整数。
parseFloat(numString) 参数numString是包含浮点数的字符串。numString 的前缀不能解释为浮点数,则返回 NaN (而不是数字)。
4、 数据类型:
(1)加前缀“0”表示 8 进制的整型值,只能包含 0 到 7 的数字。
(2)前缀为“0”同时包含数字“8”或“9”的数被解释为十进制数。
(3)前缀“0x”(零和x|X)表示 16 进制整型值。可以包含数字 0 到 9,以及字母 A 到 F(大写或小写)。使用字母 A 到 F 表示十进制 10 到 15 的单个数字。就是说 0xF 与 15 相等,同时 0x10 等于 16。
5、==和===的区别,==只判断等号两边的表达式是否相等(不含类型比较),===则是对等号两边的表达式进行含类型的比较。如:'1'==1返回true,而'1'===1返回的是false。
6、二进制运算法则:
二进制的运算算术运算二进制的加法:0+0=0 0+1=1 1+0=1 1+1=10(向高位进位)
二进制的减法:0-0=0 0-1=1(向高位借位) 1-0=1 1-1=0 (模二加运算或异或运算)
二进制的乘法:0 * 0 = 0 0 * 1 = 0 1 * 0 = 0 1 * 1 = 1
二进制的除法:0÷0 = 0 0÷1 = 0 1÷0 = 0 (无意义) 1÷1 = 1
逻辑运算二进制的或运算:遇11 二进制的与运算:遇00 二进制的非运算:各位取反
7eval(codeString)检查并执行JS代码,主要用于表达式求值。例如:
    eval("var mydate = new Date();");//创建了一个包含 Date 对象的新变量 mydate
8(1)JS对象内部应用函数时后面不能加(),向对象原型添加属性的方法
类名(构造函数名). Prototype.属性名=属性值;运用这一点可以给预定义的构造函数(都具有原型对象)定义附加属性。
(2)用Array()构造函数生成的对象除了可以通过下标引用数组元素以外,还可以像其他对象一样添加其他属
性,这一点可以用作对象的传递。
9、0的阶乘是1,在写递归调用时,在不能确定自己写的函数是否有死循环的时候,最好记录循环次数,如果过大则直接跳出。这一点在写循环的时候也是如此。
10、在JS运行函数的时候首先是检查所有的变量声明,然后以未定义的初始值创建变量;如果变量被声明时有值,只有在运行了声明行时才被声明值取代。当函数中变量没有用var
声明变量,那么改变量将会自动转为全局变量
11、在 JScript 中,对数据的处理取决于该数据的类型。
(1) Numbers 和 Boolean 类型的值 (truefalse) 是按值来复制、传递和比较的。当按值复制或传递时,将在计算机内存中分配一块空间并将原值复制到其中。然后,即使更改原来的值,也不会影响所复制的值(反过来也一样),因为这两个值是独立的实体。
(2) 对象、数组以及函数是按引用来复制、传递和比较的。按地址复制或传递时,实际是创建一个指向原始项的指针,然后就像拷贝一样来使用该指针。一旦改变原来的值,所有引用都会改变。
(3)只要两个数组引用的不是同一数组对象,即使他们的数组元素相同,在比较的时候也是不相同的。当然这种情况下,可以通过使用toString()方法来将两数组对象转换为字符串,这样来比较,两个数组就相同了。
(4)字符串是按引用复制和传递的,但是是按值来比较的。当两个字符串变量都是用new String()来创建,这时的比较为按引用比较。当两个字符变量其中有一个或这两个都是字符串值时,则按值比较。toUpperCase()toLowerCase()。这两个方法的作用是,toUpperCase()将字符串转化为全部大写,toLowerCase()将字符串转换为小写。
(5)如果在函数内部重新说明一对象来覆盖作为参数的对象,那么参数对象本身不会发送改变。如果在函数内部改变作为参数的对象的属性或则数组对象的元素,那么这个改变将影响到参数对象本身。
12、for … in用来遍历对象的所有属性。
13、JS中的转义字符:
转义序列
字符
\b
退格
\f
走纸换页
\n
换行
\r
回车
\t
横向跳格 (Ctrl-I)
\'
单引号
\"
双引号
\\
反斜杠
14with语句,一般用来引用某个已经存在的对象的属性,如下例:
with 语句通常用来缩短特定情形下必须写的代码量。
在下面的例子中,请注意 Math 的重复使用:
x = s(3 * Math.PI) + Math.sin(Math.LN10)
y = Math.tan(14 * Math.E)
当使用 with 语句时,代码变得更短且更易读:
with (Math)
{
  x = cos(3 * PI) + sin (LN10) 
  y = tan(14 * E)
}
15、条件编译,主要是有一些高级的应用需要
下面是条件编译可用的预定义变量。如果变量不是 true,就不被定义或者作为 NaN 处理。
变量
描述
@_win32
Win32 系统上运行为 true
@_win16
Win16 系统上运行为 true
@_mac
Apple Macintosh 系统上运行为 true
@_alpha
DEC Alpha 处理器上运行为 true
@_x86
Intel 处理器上运行为 true
@_mc680x0
Motorola 680x0 处理器上运行为 true
@_PowerPC
Motorola PowerPC 处理器上运行为 true
@_jscript
永远为 true
@_jscript_build
包含 Jscript 脚本引擎创建号。
@_jscript_version
包含以 majorminor 为格式的 Jscript 版本号。
条件编译部分的代码一般用/*  @*/分隔符,例如:
/*@cc_on @*/
    /*@if (@_jscript_version >= 4)
    alert("JScript version 4 or better");
    @else @*/
    alert("You need a more recent script engine.");
    /*@end @*/
16、正则表达式
(1)一般的字符串匹配列表
字符
描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'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 匹配版权符号 (©)
(2)匹配次数限定符
(3)定位符
字符
作用及用法
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' '\r' 之后的位置。例如:/^Chapter [1-9][0-9]{0,1}/,只能匹配一行中开头部分含Chapter+两位数字的字符串。
$
匹配输入字符串的结束位置。如果设置了 RegExp 对象的 Multiline 属性,$ 也匹配 '\n' '\r' 之前的位置。例如:/^Chapter [1-9][0-9]{0,1}$/,只能匹配一行中只含Chapter+两位数字的字符串。
\b
可以匹配一个单词的开始和结束边界,例如:/\bCha/匹配以Cha开头的单词,/ter\b/匹配以ter结尾的单词。
\B
匹配非单词边界。/\Bapt/不能匹配以apt开头或者结尾的单词,但是可以匹配中间包含apt的单词
(4)选择符“|”,在进行选择时通常把要选择的内容用()括起来。如:
/^(Chapter|Section) [1-9][0-9]{0,1}$/ 将匹配以Chapter+数字或则Section+数字的标题
(5)在正则表达式中出现()将子表达式括起来后,将导致这部分表达式存储到一个临时缓冲区中,可以使用非捕获元字符 '?:',  '?=',  '?!' 来忽略对这部分正则表达式的保存。
如果不忽略,当需要这部分表达式时可以用\n的方式来访问,其中的n标识子表达式在整个表达式中的位置(这些子表达式在缓冲区中是按顺序从1-99编号的)
(6)在用replace方法来替换一字符串中的子字符串时参数可以这样传递。如下:
rv = re.Replace(ss,"$1")其中:re是正则表达式,"$1"表示该表达式中的第一个子表达式。
这个函数的作用是将ss中的re部分替换为"$1"子表达式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。