JavaScriptの学習 - 型の概要

JavaScriptの学習 - 型の概要

数の

JavaScriptは仕様IEEE754次の
浮動小数点計算の問題を

0.1 + 0.2 === 0.3 // false
0.1 + 0.2=== 0.30000000000000004 // true

この問題の解決策、機械精度、ES6、この値はNumber.EPSILON、2 ^ -52である
ポリフィル

if (!Number.EPSILON) {
  Number.EPSILON = Math.pow(2, -52);
}

二つの数が等しいかどうかを決定します

if (!Number.EPSILON) {
  Number.EPSILON = Math.pow(2, -52);
}

function numberIsEqual(n1, n2) {
  return Math.abs(n1 - n2) < Number.EPSILON;
}

numberIsEqual(0.1 + 0.2, 0.3); // true

Number.MAX_VALUEの1.7976931348623157e + 308の最大数
最小数Number.MIN_VALUEの5E-324

最大のセキュリティ整数Number.MAX_SAFE_INTEGER 9007199254740991
Number.MIN_SAFE_INTEGER整数最低限の安全性-9007199254740991


Integer型の検出
Number.isInteger

console.log(Number.isInteger(3)); // true
console.log(Number.isInteger(-3)); // true
console.log(Number.isInteger(3.0)); // true
console.log(Number.isInteger(3.1)); // false

ポリフィル

if (!Number.isInteger) {
  Number.isInteger = function(num) {
    return typeof num === 'number' && num % 1 == 0;
  };
}

整数のセキュリティ
Number.isSafeInteger
ポリフィル

if (!Number.isSafeInteger) {
  Number.isSafeInteger = function(num) {
    return Number.isInteger(num) && Math.abs(num) <= Number.MAX_SAFE_INTEGER;
  };
}

NaNは
NaNで、数字の数ではありません!== NaNで、一つだけ、その値に等しいではありません
ますisNaNないNaNでも返された数値が真であります

var a = 2 / 'foo';
console.log(typeof a, a); // number NaN
console.log(a == NaN); // false
console.log(a === NaN); // false
console.log(isNaN(a)); // true
console.log(isNaN('foo')); // true

ES6はNumber.isNaNを追加しました

console.log(Number.isNaN(a)); // true
console.log(Number.isNaN('foo')); // false

ポリフィル

if (!Number.isNaN()) {
  Number.isNaN = function(n) {
    return typeof n === 'number' && window.isNaN(n);
  };
}

if (!Number.isNaN()) {
  Number.isNaN = function(n) {
    return n !== n;
  };
}

インフィニティ
プラス無限大Number.POSITIVE_INFINITYとの
負の無限大Number.NEGATIVE_INFINITYと

var a = 1 / 0 // Infinity
var b = -1 / 0 // -Infinity
var c = Infinity / Infinity // NaN

ES6 Object.isは、値が等しい決定しました

var a = 2 / 'foo'
-0 === 0 // true
a === NaN //false
Object(a,NaN) // true
Object(-0,0) // false

ポリフィル

if (!Object.is) {
  Object.is = function(v1, v2) {
    // 判断是否是 -0
    if (v1 === 0 && v2 === 0) {
      return 1 / v1 === 1 / v2;
    }
    // 判断是否是NaN
    if (v1 !== v1) {
      return v2 !== v2;
    }
    // 其他情况
    return v1 === v2;
  };
}
値と基準

単純な値(基準値タイプ)重複マナーに割り当てられた値である
コピーを参照することによって、割り当てられた評価対象値(アレイ、関数)

  var a = 2,
    b = a;
  b++;
  console.log(a); // 2
  console.log(b); // 3

  var c = [1, 2, 3],
    d = c;
  d.push(4);
  console.log(c); // [1, 2, 3, 4]
  console.log(d); // [1, 2, 3, 4]

基準点は、変数ではない、値そのものであるので、別の基準点への参照を変更することができないように

var a = [1, 2, 3];
var b = a;

b = [4, 5, 6];
console.log(a);
console.log(b);

// 让人疑惑的函数
function foo(x) {
  x.push(4);
  console.log(x); // 1,2,3,4

  x = [4, 5, 6];
  x.push(7);
  console.log(x); // 4,5,6,7
}

foo(a);
console.log(a); // 1,2,3,4

送信が実際にXに割り当てられたのコピーを参照している機能では、値は、プッシュにより変更することができるが、X = [4,5,6]と上記B = [4 5、6]は同じであり、影響を及ぼしません。

公開された83元の記事 ウォン称賛21 ビュー50000 +

おすすめ

転載: blog.csdn.net/JsongNeu/article/details/99189273