JavaScript学习笔记02 —— 表达式和运算符
本系列为阅读《JavaScript权威指南》之后所做的笔记,只供个人学习与参考。
知识要点
- 一些原始表达式
1.23 //数字直接量
"hello" //字符串直接量
/pattern/ //正则表达式直接量
true //布尔值:真
false //布尔值:假
null //空
this //返回“当前”对象
i //变量“i”
sum
undefined //undefined是全局变量,和null不同,它不是一个关键字
- 下面数组包含5个元素,其中三个元素是
undefined
:
var sparseArray = [1,,,,5];
- 对象初始化
var p = {x:2.3,y:-1.2};//一个拥有两个属性成员的对象
var q = {}; //空对象
- 函数定义表达式
var square = function(x) { return x*x; }
- 属性访问表达式
var o = {x:1,y:{z:3}}; // An example object
var a = [o,4,[5,6]]; // An example array that contains the object
o.x // => 1: property x of expression o
o.y.z // => 3: property z of expression o.y
o["x"] // => 1: property x of object o
a[1] // => 4: element at index 1 of expression a
a[2]["1"] // => 6: element at index 1 of expression a[2]
a[0].x // => 1: property x of expression a[0]
- 对象创建表达式
new Object()
new Point(2,3)
- 运算符及其优先级
内容过多,略去。这里特别注意下位运算符:与(&) 、 或(|) 、 非(~) 、异或(^) 、 左移(<<) 、 右移(>>)。
一些示例
==
与 ===
区别
恒等于(===
)一般要求比较的两者值和类型都要相同。
测试用例:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>比较运算测试</title>
</head>
<body>
<script type="text/javascript">
console.log(null===undefined); //false
console.log(true===1); //false
console.log(NaN===NaN); //false
console.log(NaN!==NaN); //true
console.log(0===-0); //true
console.log(0xf===16); //false
</script>
</body>
</html>
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。
eval
eval("3+2"); //5
var geval = eval; // Using another name does a global eval
var x = "global", y = "global"; // Two global variables
function f() { // This function does a local eval
var x = "local"; // Define a local variable
eval("x += 'changed';"); // Direct eval sets local variable
return x; // Return changed local variable
}
function g() { // This function does a global eval
var y = "local"; // A local variable
geval("y += 'changed';"); // Indirect eval sets global variable
return y; // Return unchanged local variable
}
console.log(f(), x); // Local variable changed: prints "localchanged global":
console.log(g(), y); // Global variable changed: prints "local globalchanged":