初歩的な質問ですが、ご教授ください。
次の年月日を取得し、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になったのでしょうか?