JavaScript高级程序设计读书笔记

1、在使用浮点型数据类型时,需要注意舍入误差带来的问题

var num1=0.1;
var num2=0.2;
var num3=num1+num2;
var num4=0.15;
var num5=0.15;
var num6=num4+num5;
console.log(num3);//0.30000000000000004
console.log(num6);//0.3

2、利用逻辑或来避免为变量赋 null 或 undefined 值。

var myObject = preferredObject || backupObject;
//在这个例子中,变量 myObject 将被赋予等号后面两个值中的一个。变量 preferredObject 中包 含优先赋给变量 myObject 的值,
变量 backupObject 负责在 preferredObject 中不包含有效值的情况下提供后备值。如果 preferredObject 的值不是 null,
那么它的值将被赋给 myObject;如果 1 是 null,则将 backupObject 的值赋给 myObject。

3、相等和不相等,全等和不全等

相等和不相等操作符会先将操作数进行强制类型转换之后再作比较
全等和不全等是对操作数的值和类型进行严格比较
var result1 = ("55" == 55); //true,因为转换后相等
var result2 = ("55" === 55); //false,因为不同的数据类型不相等
var result1 = ("55" != 55); //false,因为转换后相等
var result2 = ("55" !== 55); //true,因为不同的数据类型不相等

4、for-in语句是一种精准的迭代语句

for (var propName in window) {
     document.write(propName);
}
for-in语句的缺点:1、通过 for-in 循环输出的属性名的顺序是不可预测的。 具体来讲,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
                2、为了保证最大限度的兼容性,在使用 for-in 循环之前,需要先检测确认该对象的值不是 null 或 undefined。

5、arguments对象

每一个函数都有一个arguments对象,这个对象与数组类似(它并不是 Array 的实例),因为可以使用方括号语法访 问它的每一个元素(即第一个元素是 arguments[0],第二个元素是 argumetns[1],以此类推) 。通过这个对象,可以知道传进到函数的参数值。

let a=1;
let b=3;
function Add(num1,num2){
    console.log(arguments[0],arguments[1]);
    console.log(arguments);
    return a+b;
} 
Add(a,b);
//1 3 
//[Arguments] { '0': 1, '1': 3 }

通过arguments还可以修改传进来的参数,形成方法重载,例如下面的例子,每次执行这个 Add()函数都会重写第二个参数,将第二个参数的值修改为 10。
因为 arguments 对象中的值会自动反映到对应的命名参数,所以修改 arguments[1],也就修改了 num2,结果它们的 值都会变成 10。
不过,这并不是说读取这两个值会访问相同的内存空间;它们的内存空间是独立的,但它们的值会同步。

let a=1;
let b=3;
function Add(num1,num2){
    arguments[1]=10;
    return a+b;
} 
Add(a,b);
//11

【注意】如果在 ECMAScript 中定义了两个名字相同的函数,则该名字只属于后定义的函数。请看下面的例子:
    function addSomeNumber(num){
    return num + 100;
}
function addSomeNumber(num) {
    return num + 200;
}
var result = addSomeNumber(100);
//300
通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。如上述代码。
发布了5 篇原创文章 · 获赞 7 · 访问量 611

猜你喜欢

转载自blog.csdn.net/qq_19313497/article/details/104235526