- 如果省略
var
关键字就声明关键字,那么该变量会被定义为全局变量(不推荐)。
function f() {
num = 3;
}
f();
console.log(num) //结果为3
undefined
存在的意义是为了正式区分空对象指针(null)和未经初始化的变量。- 利用
Boolean()
方法可将各种类型的值转化为布尔值。其中需要注意的,空字符串为false,Number类型任何非零数字值,包括无穷大,均为true;0和NaN
(Not a Number)均为false。 NaN
任何涉及到该值的操作,如NaN/10
都会返回NaN
。它不等于任何值,包括其本身。
alert(NaN === NaN) //输出结果为 false
isNaN
方法可判断一个值是否是NaN
,如果参数是字符串,会自动转换为数值;如果是布尔值,则true->1,false->0;
console.log(isNaN(NaN)) //true
console.log(isNaN(10)) //false
console.log(isNaN("10")) //false
console.log(isNaN("blue")) //true
console.log(isNaN(true)) //false
- String类型一旦初始化就无法更改其值。下面代码的实现过程其实是:初始化str,再为str创建一个新的副本,再将副本赋值。
var str = 'zed';
str = 'zed1'
console.log(str) //zed1
- 逻辑与
&&
为短路操作符,即若左边条件为假,不会判定右边,不论真假,连看都不看一眼。 ===
与==
,推荐使用前者。==
在判定之前会把两者转换为类型相近。
console.log(1 == '1') //true
console.log(1 === '1')//false
console.log(1 == true)//true
console.log(1 === true)//false
console.log(null == undefined)//true
console.log(null === undefined)//false
switch
语句中,如果有意不写break,最好给出注释。
var n = 2;
switch (n) {
case 1:
case 2:
//合并两种情形
console.log(1 + ' or ' + 2);
break;
case 3:
console.log(3);
break;
default:
console.log(101);
break;
}
- 与其他很多语言不同的是,
switch
语句可以用任何数据类型,甚至是表达式(那些语言一般只能用数值型)。
var con = 'hhzed';
switch (con) {
case "hahah":
console.log('hhh');
break;
case 'hh' + 'zed':
console.log(1);
break;
default:
console.log(con);
break;
}
- 函数的参数列表,定义和调用的时候,参数不必需一一对应,因为传入的参数列表是一个数组,第一个,第二个参数为
arguments[0] ,arguments[1]
,命名的参数只是便于操作。 - ES中函数没有签名,故也无法像其他语言实现重载。
- ES中所有函数的参数均为按值传递,引用类型变量也是,就是把地址作为值传给函数内部的局部变量。下面的代码证明了此点:
var obj = {
name: 'zed'
}
function f(object) {
object.name = 'xxxx';
}
f(obj);
console.log(obj.name) // xxxx
var obj = {
name: 'zed'
}
function f(object) {
object.name = 'xxxx';
object = {
name: 'yyyyy'
}
}
f(obj);
console.log(obj.name)
//xxxx ,如果作为引用传给函数,那么结果应为yyyyy,故传递的是地址值
- 作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。
- 垃圾收集:标记清除,引用计数(已废弃)
- 基本数据类型存放在栈中,引用类型变量存放在堆中。
未完待续…