《javascript高级程序设计》第三章学习笔记
Undefined类型
- 该类型只有一个值,即undefined。
- 对未初始化的变量和未定义的变量,用typeof检测,都会返回‘undefined’
Null类型
- 该类型只有一个值,null。并且从逻辑角度看,null值表示一个空对象指针,所以typeof null =='object'。
- 只要意在保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存null值。
var a = null;
if (a) {
a.again = 1;
} else {
a.again = 2;
}
//这种情况会报错
var a = {};
if (a) {
a.again = 1;
} else {
a.again = 2;
}
//这种情况不会报错
Boolean类型
-
false值总结:
1.1 Number类型:0,-0,NaN.
1.2 Undefined : undefined。
1.3 Null : null.
1.4 String : ''.
1.5 Boolean :false.
Number类型
- 浮点数精度问题
var c = 0.1+0.2;
c!=0.3;
- 数值范围
2.1 某次计返回infinity的话,没法参与下次计算,因为infinity不能参与计算,可以用isFinite()来检测。
- NaN != NaN
- isNaN()函数可以用来检测一个变量是否可以转化为数值.
parseInt(''); //NaN
Number('') == 0
-
parseInt()与parseFloat()的区别:parseFloat()始终会忽略前导的0;parseFloat()只会解析十进制值,没有第二个参数制定基数的说法。
-
一个值转化为字符串有两种方式:toString()[Null,undefined值没有这个方法],String().
6.1 String():在不知道要转化的值是不是null或者undefined的时候,可以选择。可以将任何类型的值转化为字符串。
String(null) //'null' String(undefined) //'undefined'
布尔操作
- 一共有三个:非,与,或。
Boolean({}) ///true
- 不能在逻辑与操作中使用未定义的值,会报错。
乘性操作
- 如果参与乘法计算的某个操作不是数值,后台会先使用Number()转型函数将其转换为数值
加性操作
- 如果有一个操作数是字符串,泽相当于拼接字符串。
var b = '123'+78;
//b;
//"12378"
var a='as'+12;
//a;
//"as12"
var c='e'+'f';
//c;
//"ef"
- 如果有一个操作数是对象、数值或者布尔值:会调用他们的toString()方法取得字符串值,然后用字符串的相加规则,undefined和null调用String()方法,取得'undefined'和'null'。
关系操作(>,<,=,<=,>=)
-
总结:都是字符串的话,直接比较,其他的情况都要先将两个操作上转化为数值,再比较。
-
注意: 如果字符串操作数不能被转化为合理的数值,比如NaN,任何和NaN进行的关系比较,都是false.
-
null == undefined //true
4 . null === undefined //false
for-in
-
ECMAScript对象属性没有顺序,通过for-in循环输出的属性名的顺序是不可预测的。具体来讲,所有的属性都会被返回来,但是返回的先后顺序可能根据浏览器有所不同。
-
为了保证最大限度的兼容性,需要在使用for-in循环之前,先检测确认该对象的值是不是nulll或者undefeined.(因为有的要报错,有的会直接终止循环,但不报错)。
-
sarfari3以前的版本会出现一个bug,有的属性会返回两次。(注意兼容性 )
with语句
-
with语句是将代码的作用域设置到一个特定的对象中。
-
严格模式下不允许使用,否则会报错。
-
定义with语句的目的主要是为了简化多次编写的同一个对象的工作。
//改善之前
var qs = location.search.substring(1);
var hostname = location.hostname;
var url = location.href;
//使用with语句
with(location){
var qs = search.substring(1);
var hostname = hostname;
var url = href;
}
在这个重写的例子中,使用with关联了location对象。意味着在with语句的代码块中,每个变量首先被认为是一个局部变量,而如果在局部变量中找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现同名属性,则以location对象属性的值作为变量的值。
一般不建议使用with。
函数
-
函数会在执行完return语句之后停止并立即退出,即位于return语句之后的任何代码都不会被执行。
-
return语句也可以不带任何返回值。并且这种情况下,函数在停止执行后将返回undefined。
-
函数参数:在内部是用一个数组来表示的,所以不会在乎函数参数传递的数据类型和个数。(所以可以根据传入的参数个数,来模拟实现重载)
-
arguments对象只是与数组类似,但并不是Array的实例。