《javascript高级程序设计》第三章学习笔记

时间:2023-03-09 16:50:01
《javascript高级程序设计》第三章学习笔记

Undefined类型

  1. 该类型只有一个值,即undefined。
  2. 对未初始化的变量和未定义的变量,用typeof检测,都会返回‘undefined’

Null类型

  1. 该类型只有一个值,null。并且从逻辑角度看,null值表示一个空对象指针,所以typeof null =='object'。
  2. 只要意在保存对象的变量还没有真正的保存对象,就应该明确的让该变量保存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类型

  1. false值总结:

    1.1 Number类型:0,-0,NaN.

    1.2 Undefined : undefined。

    1.3 Null : null.

    1.4 String : ''.

    1.5 Boolean :false.

Number类型

  1. 浮点数精度问题
var c = 0.1+0.2;
c!=0.3;
  1. 数值范围

2.1 某次计返回infinity的话,没法参与下次计算,因为infinity不能参与计算,可以用isFinite()来检测。

  1. NaN != NaN
  2. isNaN()函数可以用来检测一个变量是否可以转化为数值.
parseInt(''); //NaN
Number('') == 0
  1. parseInt()与parseFloat()的区别:parseFloat()始终会忽略前导的0;parseFloat()只会解析十进制值,没有第二个参数制定基数的说法。

  2. 一个值转化为字符串有两种方式:toString()[Null,undefined值没有这个方法],String().

    6.1 String():在不知道要转化的值是不是null或者undefined的时候,可以选择。可以将任何类型的值转化为字符串。

    String(null)       //'null'
    String(undefined) //'undefined'

布尔操作

  1. 一共有三个:非,与,或。
Boolean({})  ///true
  1. 不能在逻辑与操作中使用未定义的值,会报错。

乘性操作

  1. 如果参与乘法计算的某个操作不是数值,后台会先使用Number()转型函数将其转换为数值

加性操作

  1. 如果有一个操作数是字符串,泽相当于拼接字符串。
var b = '123'+78;
//b;
//"12378"
var a='as'+12;
//a;
//"as12"
var c='e'+'f';
//c;
//"ef"
  1. 如果有一个操作数是对象、数值或者布尔值:会调用他们的toString()方法取得字符串值,然后用字符串的相加规则,undefined和null调用String()方法,取得'undefined'和'null'。

关系操作(>,<,=,<=,>=)

  1. 总结:都是字符串的话,直接比较,其他的情况都要先将两个操作上转化为数值,再比较。

  2. 注意: 如果字符串操作数不能被转化为合理的数值,比如NaN,任何和NaN进行的关系比较,都是false.

  3. null == undefined //true

4 . null === undefined //false

for-in

  1. ECMAScript对象属性没有顺序,通过for-in循环输出的属性名的顺序是不可预测的。具体来讲,所有的属性都会被返回来,但是返回的先后顺序可能根据浏览器有所不同。

  2. 为了保证最大限度的兼容性,需要在使用for-in循环之前,先检测确认该对象的值是不是nulll或者undefeined.(因为有的要报错,有的会直接终止循环,但不报错)。

  3. sarfari3以前的版本会出现一个bug,有的属性会返回两次。(注意兼容性 )

with语句

  1. with语句是将代码的作用域设置到一个特定的对象中。

  2. 严格模式下不允许使用,否则会报错。

  3. 定义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。

函数

  1. 函数会在执行完return语句之后停止并立即退出,即位于return语句之后的任何代码都不会被执行。

  2. return语句也可以不带任何返回值。并且这种情况下,函数在停止执行后将返回undefined。

  3. 函数参数:在内部是用一个数组来表示的,所以不会在乎函数参数传递的数据类型和个数。(所以可以根据传入的参数个数,来模拟实现重载)

  4. arguments对象只是与数组类似,但并不是Array的实例。