2013-12-18 30 views
14

私はJavaScriptの世界では新しく、この表記についての情報はありませんでした。 そのトピックで見つけました(回答を参照):Convert HH:MM:SS string to seconds only in javascript。秒に文字列(+ var)は何を意味しますか

// minutes are worth 60 seconds. Hours are worth 60 minutes. 
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]); 

はまた、私は 'HH:MM:SS' を変換するために、そのコードを使用していました。しかし、それは私にとっては安全ではないようです。ユーザーが 'XX:03:SS'を挿入すると、値はNaNになります(少なくとも私にとっては)。だから、私はそれを改善することを決めた:

function convertHHMMSSToSeconds(time) { 

// initialize seconds 
var seconds = 0; 

//ensure time 
if (!time) { 
    return seconds; 
} 


try { 
    var hmsTab = time.split(':'); // split it at the colons 

    // ensure that the hmsTab contains 3 values (hh,mm,ss) 
    if (!hmsTab || hmsTab.length !== 3) { 
     return seconds; 
    } 

    // initialize hh, mm and ss 
    var hh = hmsTab[0] > 0 && hmsTab[0] < 60? +hmsTab[0] : 0; 
    var mm = hmsTab[1] > 0 && hmsTab[1] < 60 ? +hmsTab[1] : 0; 
    var ss = hmsTab[2] > 0 && hmsTab[2] < 60 ? +hmsTab[2] : 0; 

    // return 0 if one variable is not valid 
    if(+hmsTab[0] !== hh ||+hmsTab[1] !== mm || +hmsTab[2] !== ss) { 
     return seconds; 
    } 

    // minutes are worth 60 seconds. Hours are worth 60 minutes. 
    seconds = (hh * 60 * 60) + (mm * 60) + ss; 
}catch (error) 
{ 
    seconds = 0; 
} 
return seconds && seconds>0 ? seconds : 0; 

}

だから私の質問はまだ(+ VAR)何をするか、残っている意味します。

よろしく、変数の前に

+0

数字が – Satpal

答えて

29

+記号は、数値にその変数をキャストします。例:

var x = "3"; 
var y = x + 10; // 310 
var z = +x + 10 // 13 
+1

に変換される最短形式です。私は非常に早い回答を期待していませんでした。ありがとう。 – BironDavid

+4

しかし、parseInt(..)と違って、真の数ではないvalを変換しません。 '10px' –

+0

@YuriyGalanter精度が高く評価されています。あなたは正しく、 "parseInt()"と同じではありません。 – BironDavid

5

その最短フォーム変数は数値に

6

convertionの方法を数値に変換する:

+n === Number(n) 
11

+varvarの値に単項identity operatorのアプリケーションです。

function identity(operand) { 
    return operand; 
} 

しかし、同一の操作者が数値のみに作用:アイデンティティオペレータはその唯一のパラメータを返す関数と同様と考えることができます。 Javascriptは弱い型の言語であるため、数値以外の値に数値関数を適用すると、数値以外の値は同等の数値に強制的に変換されます。アイデンティティ演算子を使用して強制する最も一般的なケースでは、数値を含む文字列が解析されて数値になります。

入力が簡単で覚えやすく、アイデンティティ演算子による強制はそれほど堅牢ではありません。ここではいくつかのサンプル出力は、次のとおりです。

+'150' // 150 
+'150z' // NaN 
+'z150' // NaN 
+'015' // 15 -- note that it doesn't interpret as octal* 
+'015z' // NaN 
+'z015' // NaN 
+'0xf' // 15 -- note that it interprets as hexadecimal 
+'0xfz' // NaN 
+'z0xf' // NaN 
+'NaN' // NaN 
+'undefined' // NaN 

parseIntと同じ入力の比較:

parseInt('150') // 150 
parseInt('150z') // 150 
parseInt('z150') // NaN 
parseInt('015') // 15 -- note that it still doesn't interpret as octal* 
parseInt('015z') // 15 
parseInt('z015') // NaN 
parseInt('0xf') // 15 -- note that it still interprets as hexadecimal 
parseInt('0xfz') // 15 
parseInt('z0xf') // NaN 
parseInt('NaN') // NaN 
parseInt('undefined') // NaN 

parseIntはまた、あなたの結果をより細かく制御できます:EMCAScript 5.で

parseInt('015', 8) // 13 
parseInt('z0xf', 36) // 1634163 
parseInt('1010', 2) // 10 

*前先頭の0を扱う場合、バージョンはデフォルトで8進数になります。

ID演算子で数値に強制変換できるのは文字列だけではありませんが、最も一般的ですが、変換が最も賢明です。他の強制は意味をなさないかもしれないし、そうでないかもしれない。例:

+[]  // 0 
+[150]  // 150 
+['150'] // 150 
+['150z'] // NaN 
+[1, 2] // NaN 
+{}  // NaN 
+null  // 0 
+true  // 1 
+false  // 0 
+NaN  // NaN 
+undefined // NaN 
+function(){} // NaN 
+0

+1これは単項アイデンティティ演算子とその例であることに言及してください。 – Kaya

関連する問題