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