javascriptで論理積がtrueを返してくれない
初歩的な質問ですが、ご教授ください。
次の年月日を取得し、xxxx-yy-zz という日付のフォーマットを返す関数checkAttr()を考えます。
'use strict'
// setDate
setDate()
function setDate(){
var today = new Date();
var str = checkAttr(String(today.getFullYear()), String(today.getMonth()+1), String(today.getDate()));
console.log(str)
}
function checkAttr(a,b,c){
if(b.lenght === 1 && c.length === 1){
console.log("Hoi")
b = "0" + b;
c = "0" + c;
} else if(b.length === 1) {
console.log("Hoihoi")
b = "0" + b;
} else if(c.length === 1) {
c = "0" + c;
}
return a + "-" + b + "-" + c;
}
checkAttr()が呼ばれた時点での仮引数は、例えば本日だとa="2017", b="1", c="2"
になります。
最初のifに入る前に、それぞれの型は、bはStringでb.lengthはNumberになります。(cも同様)
よって最初のif文の条件の左辺b.length===1
はtrueになりますし、当然c.length===1
もtrueです。
論理積はtrue && true
になり、trueを返すのでコンソール上にHoiと表示されるのを期待していたのですが、chromeやNodeで確認したところ、実際は最初の条件式はfalseになり、二番目の分岐に処理が移動し、Hoihoiと表示されました。
なぜ最初の論理積はfalseになったのでしょうか?