

初歩的な質問ですが、ご教授ください。  
次の年月日を取得し、xxxx-yy-zz という日付のフォーマットを返す関数checkAttr()を考えます。

[code]

    '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;
    }
    
[/code]

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になったのでしょうか？


CC BY-SA 3.0
2017-01-02T15:08:57.580
31571
2017-01-03T00:32:04.907
2017-01-02T15:15:57.203
20074
20074
question
javascript jquery
javascriptで論理積がtrueを返してくれない


単純なtypeミスですね。

[code]

    b.lenght === 1
    
[/code]


CC BY-SA 3.0
2017-01-02T15:28:48.147
31572
2017-01-02T15:28:48.147
7655
31571
answer


指摘されているようにtypoですが、別のアプローチとして

[code]

    function zeroPadding(n) {
        // 100足してしまえば必ず３桁になるので文字列化後に先頭の文字をとばす
        return (100 + n + "").substring(1);
    }
    
    function checkAttr(a, b, c) {
        return a + "-" + zeroPadding(b) + "-" + zeroPadding(c);
    }
    
[/code]


CC BY-SA 3.0
2017-01-03T00:32:04.907
31576
2017-01-03T00:32:04.907
4236
31571
answer