【问题标题】:JavaScript Custom Function defined as a Variable, Should the Declaration be a 'var' or 'let' or 'const'?JavaScript自定义函数定义为变量,声明应该是'var'还是'let'还是'const'?
【发布时间】:2021-10-23 10:11:15
【问题描述】:

我有代码味道的建议,可以在下面的函数中添加声明。

在“nullToEmpty”的声明中添加“let”、“const”或“var”关键字,使其明确。

nullToEmpty = function (obj) {
    if(typeof obj == 'undefined'){
        return null;
    }else{
        return JSON.parse( JSON.stringify(obj).replace(/:null/gi, ':""') );
    }
};

我想知道对于这种类型的函数最合适的声明类型是什么,我应该使用 常量 ?

  const nullToEmpty = function (obj) {
        if(typeof obj == 'undefined'){
            return null;
        }else{
            return JSON.parse( JSON.stringify(obj).replace(/:null/gi, ':""') );
        }
    };

【问题讨论】:

  • 如果您正在编译它以在旧浏览器中使用,请使用 const 作为变量永远不会改变。当某些东西不应该改变时,总是使用 const 。 let 什么时候会或可以改变。除非您不编译,否则不再使用 var。
  • 在我自己的js编码规则中,我总是使用var作为全局变量,let作为局部变量,const作为常量变量,如c++中的DEFINE MACRO .所以在这种情况下,我将使用var。但是根据stackoverflow.com/a/33040926/15487427,函数声明的所有三种类型——varletconst——在某些情况下都有异常,声明为function nullToEmpty(obj)将是最好的一种。这是我的小意见:)
  • const 似乎很好,如果您不打算在同一函数或顶级范围内拥有另一个 nullToEmpty。不过,就个人而言,我只会使用常规的function,然后您不必担心在定义之前调用它。此外,您可以像 if(obj === undefined) 那样做,因为 obj 是一个参数。不过,您应该知道null 不是undefinedtypeof null 给你'object'
  • 附注我建议在函数中使用if (!obj) 而不是if (typeof obj == 'undefined')。它适用于所有类型的边界检查(nullundefined 等),代码最简单。
  • 写一个function nullToEmpty(obj) {…}声明

标签: javascript


【解决方案1】:

变量

var 是声明变量的“旧方式”——它可以被重新声明,如果在函数内部声明,它的作用域是局部的(仅存在于当前函数内部),否则是全局的。它在某些情况下可能有用,但不再推荐,因为如果不谨慎使用,全局范围可能会导致一些不良影响。

let 是一个较新的声明,与var 具有几乎相同的行为,但范围始终是本地的。

常量

const 也总是本地的,但它不同,因为它不能被重新声明。不过,这有时有点误导,因为“你不能重新定义”并不意味着“你不能改变它”。

这对原始值(字符串、数字等)按预期工作,但不适用于对象、数组或函数。

这是无效代码:

const primitive = 1;
primitive = 2;

这是有效的:

const array = [1, 2, 3];
array.push(4);

回答

所以,说了这么多:是的,我会在那种情况下使用const。你的函数声明不会改变,也不需要它是全局范围的。

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 2017-12-16
    • 2014-04-12
    • 2019-07-28
    • 1970-01-01
    • 2018-03-15
    • 2020-09-28
    • 1970-01-01
    相关资源
    最近更新 更多