Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写聪明的Javascript_Javascript - Fatal编程技术网

编写聪明的Javascript

编写聪明的Javascript,javascript,Javascript,我想,对于在座的所有专家来说,这是一个非常愚蠢的问题 我有一堆if语句(16),我正试图找到一种方法,用更少的时间编写48行代码,因为我确信这是可能的 我到处都读过这么长的if/else if语句是不好的做法 那么,如何巧妙地编写这些代码呢?谢谢 if (!latitude || typeof latitude == 'undefined') { latitude == 'undefined'; } else if( !longitude || typeof longitude

我想,对于在座的所有专家来说,这是一个非常愚蠢的问题

我有一堆if语句(16),我正试图找到一种方法,用更少的时间编写48行代码,因为我确信这是可能的

我到处都读过这么长的if/else if语句是不好的做法

那么,如何巧妙地编写这些代码呢?谢谢

  if (!latitude || typeof latitude == 'undefined') {
    latitude == 'undefined';

  } else if( !longitude || typeof longitude == 'undefined' ) {
    longitude == 'undefined';

  } else if( !name || typeof name == 'undefined' ) {
    name == 'undefined';

  } else if( !adresseNum || typeof adresseNum == 'undefined' ) {
    adresseNum == 'undefined';

  } else if( !adresseVille || typeof adresseVille == 'undefined' ) {
    adresseVille == 'undefined';

  } else if( !adresseDpt || typeof adresseDpt == 'undefined' ) {
    adresseDpt == 'undefined';

  } else if( !adresseRg || typeof adresseRg == 'undefined' ) {
    adresseRg == 'undefined';

  } else if( !adresseFr || typeof adresseFr == 'undefined' ) {
    adresseFr == 'undefined';

  } else if( !adresseCp || typeof adresseCp == 'undefined' ) {
    adresseCp == 'undefined';

  } else if( !telephone || typeof telephone == 'undefined' ) {
    telephone == 'undefined';

  } else if( !horaires || typeof horaires == 'undefined' ) {
    horaires == 'undefined';

  } else if( !note || typeof note == 'undefined' ) {
    note == 'undefined';

  } else if( !reviewFinale || typeof reviewFinale == 'undefined' ) {
    reviewFinale == 'undefined';

  } else if( !website || typeof website == 'undefined' ) {
    website == 'undefined';

  } else if( !types || typeof types == 'undefined' ) {
    types == 'undefined';

  } else {
    console.log('All fields OK');
  }

每个变量都是自己定义的还是来自另一个对象或类似于
var telephone=obj.telephone

如果是这种情况,您可以这样做:

var ok = true;
for (var o in obj) {
    if (!obj[o]) {
        obj[o] == 'undefined';
        ok = false;
    }
}

if (ok) {
    console.log('all fields are ok');
}

但我认为最好将所有变量组合成object或form

一个可能有效的选项是在参数分解结构中使用默认值。基本上,如果每个变量都未定义,就要检查它(顺便问一下,如果其中一个值为“false”,会发生什么情况?)。
但这是针对这个案例的

function functionWithSomeLogic({
    latitude = 'undefined',
    longitude = 'undefined',
    name = 'undefined',
    adresseNum = 'undefined'
    // ... and the rest of the variables
}) {
    // Do whatever here, all the arguments are initialized or have the string value of 'undefined'
} 
顺便说一下,如果您不想设置默认值,而是想抛出一个异常

const throwArg = argName => throw new Error(`Argument missing: ${argName}`);

function functionWithSomeLogic({
    latitude = throwArg('latitude'),
    longitude = throwArg('longitude'),
    name = throwArg('name'),
    adresseNum = throwArg('adresseNum')
    // ... and the rest of the variables
}) {
    // Do whatever here, all the arguments are initialized, if one of them
    // had been undefined, an appropriate exception will be thrown before this body
} 

你可以这样做一个函数来检查它们

var isDefined = [latitude, longtitude, name, adresseNum, adresseVille, adresseDpt, adresseRg, adresseFr, adresseCp, telephone, horaires, note, reviewFinale, website, types].every(function (value) {return !!value;});

一个简单的es6函数就可以做到这一点。正如@Andrey指出的那样

const arefined=(…args)=>args.every(elm=>!!elm);
如果(定义了(纬度、经度、名称/*,…*/)){
log('All fields OK');

}

在ES6中,您可以使用一个对象,将所有变量作为键和值对,然后使用falsy values
undefined
进行迭代和赋值,并使用
if语句检查结果

var data = { latitude, longitude, name, adresseNum, adresseVille, adresseDpt, adresseRg, adresseFr, adresseCp, telephone, horaires, note, reviewFinale, website, types };

if (Object.keys(data).every(k => data[k] || (data[k] = 'undefined', false))) {
    console.log('All fields OK');
}

一个
switch
语句可能会对您有所帮助。您确定
else if
模式吗?值是否不独立于检查和分配?创建函数是空字符串还是有效内容?您也不需要条件的第二部分,未定义的变量将使用es6传递第一个条件,只需稍微更改您的answer@user7951676,我不太明白ES6在哪里会简化一些东西,你能给我一个线索吗?你可以把它们放到像{var1,var2}这样的对象中键将是变量名,而不是for-in循环,除非有一个对象方法来迭代所有键。哦,这是Nina的答案:)老实说,我不认为添加ES6会简化这个问题。这只是另一个借口
var data = { latitude, longitude, name, adresseNum, adresseVille, adresseDpt, adresseRg, adresseFr, adresseCp, telephone, horaires, note, reviewFinale, website, types };

if (Object.keys(data).every(k => data[k] || (data[k] = 'undefined', false))) {
    console.log('All fields OK');
}