js语复习笔记(一)
js解析代码
1. js仅在不加分号无法解析的情况下才自动添加
var a
a
=
3
console.log(a)
将会被解析为:
var a;
a = 3;
console.log(a);
2. 不添加“;”可能导致错误
var y = x + f
(a+b).toString()
会被解析为:
var y = x + f(a+b).toString()
3. 在默认情况下的解析情况:
return、break、continue和之后的表达式不能换行,否则会在前者关键字后添加;
前缀,后缀运算符的解析:后缀运算符应与表达式处于同一行,
x
++
y
将被解析为x;++y
js的数据类型:原始类型和对象类型
原始类型:数字、字符串、布尔值、null、undefined
1. 数字:
- 较为复杂的运算定义在Math对象中
- 预定义了全局变量NaN,Infinity(ES5只读,不可修改)
- 对于NaN的判断,应该用x!=x,仅当x等于NaN为真,其中NaN!=NaN
- js的计算精度问题:.3-.2 != .2 - .1
- 日期中,Date().getMonth(),[0,1,2,3,4,5,6]对应[“日”,”一”,”二”,”三”,”四”,”五”,”六”]
2. 文本:
- 注意对特殊字符的转义,例如在字符串中含有can’t应注意写为can\’t
- 一些特殊的转义字符,\n,\t,\\等
- 字符串的几种方法:length、charAt、slice、indexOf、split、lastIndexOf、substring,toUpperCase,toLowerCase,replace
- 正则匹配,RegExp(重点)
3. 布尔值:
- flase转换:undefined、null、0、-0、NaN、”“
- \==与===的区别
4. null和undefined:
- type of null => object
- type of undefined => undefined
- 两者区分要用严格判等符 ===
5. 全局对象:
- 在读取字符串、数字、布尔值的属性值时表现得像对象,但是为其属性赋值则会忽略
类型转换:
1. 隐式示例:
10 + "objects" => "10 objects"
"7"*"4" => 28
"5"+4 => "54"
var n = 1 - "x" => NaN
n + "objects" => "NaN objects"
+"5"=> 5
2. 显示转换:
惯用写法:
x + "" => String(x)
+x => Number(x)
!!x => Boolean(x)
3. 进制的转换:
var n = 17;
n.toString(2) // => 10001 转换为2进制
"0x" + n.toString(16) // => 0x11
4. 利用全局函数parseInt()、parseFloat()进行解析
此种方式会跳过任意数量前置空格,并且解析尽可能多的数值字符
parseInt("3 build mice") // => 3
parseInt("3.14 meters") // => 3.14
parseInt(".1") // => NaN
parseFloat(".1") // => NaN
parseInt还可以接受第二个可选参数、指定数字转换的基数,合法取值为2~36
5.所有的对象均转换为true,new Boolean(false)同样转换为true
变量声明:
1. var声明,全局变量、局部变量
2. 变量声明提前(不赋值)
var scope = "global";
function f(){
console.log(scope); // => undefined
var scope = "local";
console.log(scope); // => local
}
在这段代码中,由于声明提前,scope不再是全局变量了,该代码与下面代码效果相同
var scope = "global";
function f(){
var scope;
console.log(scope); // => undefined
scope = "local";
console.log(scope); // => local
}
表达式与运算符
表达式类型:
1.原始表达式:
- 包括直接出现的常值,类似:1.23 “hello” /patter/
- js中的保留字构成的原始表达式: true、false、null、this
- js中的变量
2. 对象及数组初始化表达式
- []、[1,2,3]、[1,,,4]数组初始化表达式
- {}、{x:1, y:-1.2}对象初始化表达式
3. 函数表达式
var f = function(x){return x*x}
4. 属性访问表达式
- 通过”.”访问,局限是属性名不能是保留字符 => expression.identifier
- 使用”[]”访问,指定要访问的属性名或者索引 => expression[identifier]
5. 调用表达式
- 包含函数与参数,例如:f(0)、Math.max(1,2,3,4)
6. 对象创建表达式
- 利用关键字new,构造函数
7. 算术表达式
- 算术计算的顺序,例如:
var a = 1,b;
b = (a++)+a // => b=2
/*
过程为,计算b,计算a++(设值为c),计算a,计算a+c,将值赋给b
*/
- 计算符号:
按位与&,按位或|,按位异或^,按位非~,左移<<,右移>>,含符号右移>>>,含符号左移<<< - 不同类型的操作数比较:
"1" < "2" => true
"11" < 2 => false
"11" < "2" => true
- in操作符:
var point = {x:1, y:1};
x in point; // => true
z in point;// => false
"toString" in point; // => true 继承自object
var data = [4,5,6]
1 in data; // => true 1被转换为"1",数组包含索引1
"0" in data; // => true
5 in data; // => false 数组不包含索引5的元素
- typeof运算符:
x | typeof x |
---|---|
undefined | “undefined” |
null | “object” |
true or flase | “boolean” |
任意数字、NaN | “number” |
任意字符串 | “string” |
任意函数 | “function” |
任意内置对象 | “object” |
任意宿主对象 | 由编译器中自己实现的字符串,非基本类型 |