【读书笔记】:《编写可维护的JavaScript》第04章 变量、函数和运算符

第04章 变量、函数和运算符

4.1 变量声明

  1. 所有变量声明提前
  2. 将所有的var语句合并成一个,每个变量的初始化独占一行。赋值运算符对齐,没有赋值的变量放在末尾。注意每个变量之间用逗号“,”隔开,不能用分号
function movable(i,j){
    // 我并不推荐这种写法 因为容易将末尾的逗号(,) 写成分号(;) 
    // 这会导致意外的创建全局变量
    var i     = 100,
        j     = 1001,
        value = "fu2",
        txt;
        
    function test(){
    }    
}
  1. 这里推荐每一个变量都用一个 var 声明:
function movable(i,j){
    var i = 100;
    var j = 1001;
    var value = "fu2";
    var txt;
    
    function test(){
    }    
}

4.2 函数声明

建议先声明再调用

4.3 立即调用的函数 匿名函数

匿名函数,即为没有函数名的函数
将匿名函数赋值给变量或者属性:

var doSomething = function() {
    //函数体
};

将函数的执行结果赋值给变量(在函数后面加上一对圆括号)

var doSomething = function() {
    //函数体
    return {
        message:"Hi"
    }
}();

这种情况下,在没有读完整个代码,完全不知道是将函数整体赋值给变量,还是将函数执行结果赋值给变量。我们可以将整个函数用一对圆括号包裹起来,来做区分:

var doSomething = (function() {
    //函数体
    return {
        message:"Hi"
    }
}());

4.4严格模式

"use strict"

推荐在函数内部使用该语句。这样就只会在该函数内部使用严格模式。
ES6 已经完全使用严格模式

4.5 相等

JavaScript具有强制类型转换机制(type coercion)。
使用相等运算符==和!=做判断时,如果两个值得类型不同时,这两个运算符都会将做比较的两个值进行强制类型转换。这会导致在很多实际情况下,代码并不按照我们所期望的方式运行。
如果数字和字符串进行比较,字符串会搜西安转换为数字,然后进行比较:

// 比较数字5和字符串5
console.log(5 == "5"); // true

// 比较数字25和十六进制的字符串
console.log(25 == "0x19"); // true

当发生强制类型转换时,字符串会被转换成数字,类似使用Number()转换函数。因为Number()可以正确解析十六进制的格式,它会将看起来像十六进制的数字转换为十进制数,然后再进行比较。

如果一个布尔值和数字比较,布尔值会首先转换为数字,然后再进行比较。false:0,true:1。

// 数字 1 和 true 比较
console.log(1 == true); // true 

// 数字 0 和 false 比较
console.log(0 == false); // true

// 数字 2 和 false 比较
console.log(2 == true); // false

如果其中一个值是对象而另一个不是,则会首先调用对象的valueOf()方法,得到原始类型值再进行比较。如果没有定义valueOf(),则调用toString()。

var object = {
    toString:function(){
        return "0x19";
    }
};

console.log(object == 25); // true

null 和 undefined,根据ECMAScript标准规范的描述,这两个特殊值被认为是相等的。

console.log(null == undefined); // true

由于强制类型转换的缘故,我们推荐不要使用==和!=,而是使用===和!==。这两个运算符可以避免变量进行强类型转换。因此,如果两个值的类型不一样,则认为它们不相等,这样就可以让你的比较语句执行比较时行为一致。

// 比较数字5和字符串5
console.log(5 == "5"); // true
console.log(5 === "5"); // false

// 比较数字25和十六进制的字符串
console.log(25 == "0x19"); // true
console.log(25 === "0x19"); // false

// 数字 1 和 true 比较
console.log(1 == true); // true 
console.log(1 === true); // false 

// 数字 0 和 false 比较
console.log(0 == false); // true
console.log(0 === false); // false

// 数字 2 和 false 比较
console.log(2 == true); // false
console.log(2 === true); // false

var object = {
    toString:function(){
        return "0x19";
    }
};

// 一个对象和 25 比较
console.log(object == 25); // true
console.log(object === 25); // false

// null 和 undefined 比较
console.log(null == undefined); // true
console.log(null === undefined); // false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值