美文网首页
【读书笔记】:《编写可维护的JavaScript》第04章 变量

【读书笔记】:《编写可维护的JavaScript》第04章 变量

作者: 龍天下 | 来源:发表于2020-11-14 10:02 被阅读0次

第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

相关文章

  • 编写可维护的JavaScript——全局变量

    JavaScript执行环境在很多方面都有其独特之处。全局变量和函数的使用便是其中之一。事实上,JavaScrip...

  • JavaScript检测原始值、引用值、属性

    上周写过一篇读书笔记《编写可维护的JavaScript》之编程实践,其中 第8章 避免『空比较』是博主在工作中遇坑...

  • 编写可维护的JavaScript

    基本的格式化 行的长度: 代码但行长度不超过80个字符 换行:超过单行最大字符限制,手动将一行拆成两行,下一行增加...

  • 编写可维护的javascript

    每个人都有固定的一套编码习惯,但在团队协作过程中,则需要每个人都遵守统一的编码约定和编程方法。 编程风格 基本的格...

  • 编写可维护的 JavaScript

    几乎每个程序员都有接手维护别人遗留项目的经历。或者,有可能一个老项目某一天又被重新启动。 通常情况下,接手老项目都...

  • 前端技术书

    入门级 《JavaScript高级程序设计》 《编写可维护的JavaScript》 《Javascript语言精粹...

  • <编写可维护的JavaScript>读书笔记

    这本书你将学到如何写出具有高维护性的代码,以便团队任何人都可以轻松地理解、修改或扩展你的代码。 “程序是写给人读的...

  • 编写可维护的JAVASCRIPT 读书笔记

    编写可维护的JAVASCRIPT 读书笔记 缩进层级:4个空格字符为一个缩进层级 行的长度:单行不超过80个字符 ...

  • 《编写可维护的javascript》读书笔记

    为什么要编写可维护的javascript? 软件生命周期80%的成本消耗在了维护上。 几乎所有的软件维护者都不是它...

  • <编写可维护的JavaScript>总结

    第一部分 编程风格 "程序是写给人读的,只是偶尔让计算机运行一下" --- Donald Knuth ...

网友评论

      本文标题:【读书笔记】:《编写可维护的JavaScript》第04章 变量

      本文链接:https://www.haomeiwen.com/subject/zjmvbktx.html