Check if a variable contains a numerical value in Javascript?

后端 未结 9 1477
伪装坚强ぢ
伪装坚强ぢ 2020-12-01 18:36

In PHP, it\'s pretty easy:

is_numeric(23);//true
is_numeric(\"23\");//true
is_numeric(23.5);//true
is_numeric(true);//false

But how do I do

9条回答
  •  时光说笑
    2020-12-01 19:22

    Run the code snippet to see comparisons of top answers on this topic.

    Some test cases are not highlighted (and don't contribute to the summary). These cases are flagged as ambiguous because it is not clear whether a given value should or should not be considered a number.

    // Each of these functions should output a truthy/falsy value if the input is
    // a number
    const solutionsToTest = [
      v => parseFloat(v),
      v => Number(v),
      v => !isNaN(v),
      v => typeof v != "boolean" && !isNaN(v),
      v => isFinite(String(v)),
      v => !isNaN(parseFloat(v)) && isFinite(v)
    ];
    
    const testCases = [
      //[ Test Name, Test Value, Expected Output, Is Ambiguous ]
    
      // Whitespace
      ['""', "", false, false],
      ['"\\t"', "\t", false, false],
      ['" "', " ", false, false],
    
      // Infinity
      ['"Infinity"', "Infinity", false, true],
      ['"+Infinity"', "Infinity", false, true],
      ["-Infinity", -Infinity, false, true],
      ["Infinity", Infinity, false, true],
    
      // Numbers mixed with symbols
      ['"123abc"', "123abc", false, true],
      ['"abc123"', "abc123", false, false],
      ['".0."', ".0.", false, false],
      ['"1."', "1.", true, true],
      ['"."', ".", false, true],
      ['"01"', "01", true, true],
      ['"-0"', "-0", true, true],
      ["+1", +1, true, true],
      ["-1", -1, true, true],
    
      // Other js types
      ["'null'", "null", false, false],
      ["'true'", "true", false, false],
      ["'false'", "false", false, false],
      ["null", null, false, false],
      ["true", true, false, false],
      ["false", false, false, false],
      ["NaN", NaN, false, false],
      ["[]", [], false, false],
      ["{}", {}, false, false],
      ["/./", /./, false, false],
      ["() => {}", () => {}, false, false]
    ];
    
    const styles = {
      code: {
        fontFamily: "monospace",
        fontSize: 16
      },
      success: {
        backgroundColor: "#00ff5478"
      },
      failure: {
        backgroundColor: "#ff00008c"
      }
    };
    
    class TestCaseTable extends React.Component {
      static renderTableHeader(solutionsToTest) {
        return (
          
            
              

    Test Case

    {solutionsToTest.map(f => (

    {f.toString()}

    ))} ); } static renderTableRow(testCase, solutionsToTest) { const [testName, input, expectedOutput, isAmbiguous] = testCase; return ( {testName} {solutionsToTest.map(f => { const output = Boolean(f(input)); const style = isAmbiguous ? {} : output == expectedOutput ? styles.success : styles.failure; return (

    {output + ""}

    ); })} ); } render() { // Sort test cases, put the ambiguous ones after (but maintain stable sort // order) let sortedCases = [ ...testCases.filter(([a, b, c, ambiguous]) => !ambiguous), ...testCases.filter(([a, b, c, ambiguous]) => ambiguous) ]; return ( {TestCaseTable.renderTableHeader(solutionsToTest)} {sortedCases.map(tc => TestCaseTable.renderTableRow(tc, solutionsToTest) )}
    ); } } class TestCaseSummaryTable extends React.Component { renderTableHeader(solutionsToTest) { return ( Summary {solutionsToTest.map(f => (

    {f.toString()}

    ))} ); } renderSuccessRateRow(solutionsToTest, testCases) { // Ignore potentially ambiguous test cases testCases = testCases.filter( ([name, input, expected, ambiguous]) => !ambiguous ); const numSuccess = testSolution => testCases.reduce((succeeded, [name, input, expected]) => { return succeeded + (Boolean(testSolution(input)) == expected ? 1 : 0); }, 0); return (

    Test Success

    {solutionsToTest.map(f => (

    {numSuccess(f)} / {testCases.length}

    ))} ); } render() { return ( {this.renderTableHeader(solutionsToTest)}{this.renderSuccessRateRow(solutionsToTest, testCases)}
    ); } } const root = () => { return (
    ); }; ReactDOM.render(root(), document.querySelector("#application"));
    td {
      text-align: center;
      vertical-align: middle;
    }
    
    
    

提交回复
热议问题