[英]Calculator function based on passed in arguments
我正在構建一個簡單的計算器作為作業。 該函數使用兩個數字(number1,number2)和一個運算符(+,-,*,/)作為參數。
但是,有幾種情況:
編輯:場景3應該只解釋傳入的2個參數(1個數字和1個運算符)。我知道這不是調用函數的正確方法,但這是我嘗試解決的任務的一部分。
這是我嘗試過的
function calc (number1, number2, operator) {
if (operator == undefined) {
return "wrong data provided"
} else {
if (operator == "+") {
return number1+number2
} else if (operator == "-") {
return number1-number2
} else if (operator == "*") {
return number1*number2
} else if (operator == "/") {
return number1/number2
}
}
if (number2 == undefined) {
if (operator == "+") {
number2=0;
return number1+number2
} else if (operator == "-") {
number2=0;
return number1-number2
} else if (operator == "*") {
number2=1;
return number1*number2
} else if (operator == "/") {
number2=1;
return number1/number2
}
} else {
if (operator == "+") {
return number1+number2
} else if (operator == "-") {
return number1-number2
} else if (operator == "*") {
return number1*number2
} else if (operator == "/") {
return number1/number2
}
}
}
calc(50,“ +”)導致“提供了錯誤的數據。為什么?
您可以執行以下操作:
function calc(par1, par2, par3) { var number1 = par1; var operator; var number2; if (typeof par2 === 'string') { operator = par2; } else { number2 = par2; operator = par3; } if (typeof operator === "undefined") { return "wrong data provided" } else { if (operator == "+") { return number1 + (number2 || 0); } else if (operator == "-") { return number1 - (number2 || 0); } else if (operator == "*") { return number1 * (typeof number2 === 'undefined' ? 1 : 0); } else if (operator == "/") { return number1 / (typeof number2 === 'undefined' ? 1 : 0); } } } console.log(calc(50, '+')); console.log(calc(50, '*')); console.log(calc(50, 20, '+')); console.log(calc(50, undefined, '*')); console.log(calc(50, 10));
在這里,我使用(number2 || 0)
在number2
undefined
或0
和(typeof number2 === 'undefined' ? 1 : 0)
對-
和+
操作使用number2
或0
進行計算。 undefined
number2
時,對*
和/
使用number2
或1
進行計算。
更好的代碼:
function calculate(number1,number2,operator){
if (!number1 || !number2){
return "Invalid number"
}
if (!['*','-','/','+'].includes(operator)){
return "Invalid operator"
}
switch(operator){
case "+":
return number1 + number2;
case "/":
return number1 * number2;
case "*":
return number1 * number2;
case "-":
return number1 - number2;
}
}
console.log(calculate(5,6,"+"))
calc(50,"+")
在這里,您僅傳遞2個參數。 所以第三個參數是不確定的
calc(50,,"+")
傳遞3個參數
您可以定義您的變量如下
const operators = ["+", "-", "*", "/"]; function calc(number1, n2, op) { // the part i add let number2; let operator = op; if (operators.includes(n2)) { if (n2 == "+" || n2 == "-") { number2 = 0; } else { number2 = 1; } operator = n2; } else { number2 = n2; } if (operator == undefined) { return "wrong data provided" } else { if (operator == "+") { return number1 + number2 } else if (operator == "-") { return number1 - number2 } else if (operator == "*") { return number1 * number2 } else if (operator == "/") { return number1 / number2 } } if (number2 == undefined) { if (operator == "+") { number2 = 0; return number1 + number2 } else if (operator == "-") { number2 = 0; return number1 - number2 } else if (operator == "*") { number2 = 1; return number1 * number2 } else if (operator == "/") { number2 = 1; return number1 / number2 } } else { if (operator == "+") { return number1 + number2 } else if (operator == "-") { return number1 - number2 } else if (operator == "*") { return number1 * number2 } else if (operator == "/") { return number1 / number2 } } } console.log(calc(50, "+"));
您將錯誤的數據傳遞給函數。 在javascript中,您需要傳遞所有參數。
calc(50, "+")
您將獲得一個未定義的第3個參數,並且所有時間都是“提供的數據錯誤”。
calc(50, 0, "+")
如前所述,您必須使用正確的參數進行調用。 calc(50,0,"+")
。 但是,您可以進行破解-在許多庫中都很常見。
function calc (number1, number2, operator) {
operator = operator || number2;
number2 = (number2 === operator) ? undefined : number2;
// Rest keep the same
if (operator == undefined) {
return "wrong data provided"
}
第一步- operator = operator || number2;
operator = operator || number2;
-是將operator
operator
設置為operator
,但是如果它是偽造的(false,undefined,0等),它將分配number2。
第二步number2 = (number2 === operator) ? undefined : number2;
number2 = (number2 === operator) ? undefined : number2;
如果number2和operator嚴格相等,則將number2設置為undefined。 如果它們不相同,則分配原始值,即number2。
現在您可以調用calc(50,"+")
,它將和calc(50,0,"+")
編輯:請注意,這現在將無法正常工作,因為首先是if
它為false,那么它將立即嘗試進行數學運算...因此,您至少必須以這種方式進行更改:
if (operator == undefined) {
return "wrong data provided"
} else if (number2 != undefined) {
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.