javascriptの中のvalue
4294 ワード
You Don't Know JS Value学習ノート
Aray
Aray-like
jsにはよく使われる2つのクラスの配列オブジェクトがあります.一つはdomノードを検索する結果のオブジェクトで、一つは関数のargments属性です.クラスのオブジェクトを行列オブジェクトに変換するには、一般的に2つの方法があります.
javascriptでは配列は可変データタイプであり、文字列は可変データタイプではない.
数字の文法
jsは一つの数字タイプしかありません.numberは「整数」と小数形式を含みます.整数が引用符を打つのはjsの中で厳密な意味の整数がないからです.これも昔からjsが非難されているところです.
jsの整数は小数の十進数がないことです.したがって、42.0および整数42に等しい.
ほとんどの現代プログラミング言語と同様に、jsのデジタルタイプはIEEE 754標準に基づいて実現され、この標準は通常「浮動小数点数」とも呼ばれる.jsは64ビットのバイナリを使用しています.
Number.prototypeのtoFixed()方法は、小数部の表示桁数を指定できます.
ほとんどのプログラミング言語では、次の問題に直面しています.
ES 6から、この値はNumber.EPSILONに定義される.
es 6では、Number.isInteger関数を提供して検査を行います.まず、整数フォーマットかどうかチェックして、jsが許可する範囲内にあるかどうかを確認します.
最大53桁の整数がありますが、32桁の数字しか使えない数字がありますので、これらの安全範囲は小さいです.Math.pow(-2,31)(-2147483648,約-21億)からMath.pow(2,31)-1(21473647,約21億)になります.a 124 0は、変数aの中の数値を32ビットの符号付き整数に変換することができ、それは32ビットの整数にしか適用されないからである.したがって、0と操作すれば、aの32ビットの数を切り取ります.
nullとundefined
undefinedとは、一度も値を与えないことを意味します.nullは値を与えたことがありますが、まだありません.nullは特別なキーワードです.識別子ではなく、変数として使用できません.しかし、undefinedは識別子であり、変数として使用されたり、値が割り当てられたりすることができる.
Aray
var a = [ ];
a["13"] = 42;
a.length; // 14
javascriptでは、keyが数字文字列だけであれば、10進数のkeyに変換され、長さが変化することに留意すべきである.Aray-like
jsにはよく使われる2つのクラスの配列オブジェクトがあります.一つはdomノードを検索する結果のオブジェクトで、一つは関数のargments属性です.クラスのオブジェクトを行列オブジェクトに変換するには、一般的に2つの方法があります.
function foo() {
var arr = Array.prototype.slice.call( arguments )
arr.push( "bam" );
console.log( arr );
}
foo( "bar", "baz" ); // ["bar","baz","bam"]
ES 6による新属性Aray.fromの変換:var arr = Array.from( arguments )
ストリングスjavascriptでは配列は可変データタイプであり、文字列は可変データタイプではない.
var a = "foo";
var b = ["f","o","o"];
a[1] = "O";
b[1] = "O";
a; // "foo"
b; // ["f","O","o"]
// 。
文字列の可変性がないと、文字列の固有関数が自身を変えることができなくなります.新しい文字列を返します.c = a.toUpperCase();
a === c; // false
a; // "foo"
c; // "FOO"
b.push( "!" );
b; // ["f","O","o","!"]
もちろん、私達もArayの固有の関数を借りて文字列を処理することができます.自分のAray関数を変えないといけません.!!!a.join; // undefined
a.map; // undefined
var c = Array.prototype.join.call( a, "-" );
var d = Array.prototype.map.call( a, function(v){
return v.toUpperCase() + ".";
} ).join( "" );
c; // "f-o-o"
d; // "F.O.O."
独自のAray.reverse方法を変えて文字列を操作してみます.
Array.prototype.reverse.call( "strong" )
//Uncaught TypeError: Cannot assign to read only property '0' of object '[object String]'
文字列を逆に出力する方法です.var c = a
// split `a` into an array of characters
.split( "" )
// reverse the array of characters
.reverse()
// join the array of characters back to a string
.join( "" );
c; // "oof"
Number数字の文法
jsは一つの数字タイプしかありません.numberは「整数」と小数形式を含みます.整数が引用符を打つのはjsの中で厳密な意味の整数がないからです.これも昔からjsが非難されているところです.
jsの整数は小数の十進数がないことです.したがって、42.0および整数42に等しい.
ほとんどの現代プログラミング言語と同様に、jsのデジタルタイプはIEEE 754標準に基づいて実現され、この標準は通常「浮動小数点数」とも呼ばれる.jsは64ビットのバイナリを使用しています.
var b = 42.
このような書き方はjsでは可能ですが、可読性のためには、このように書くことは勧められません.Number.prototypeのtoFixed()方法は、小数部の表示桁数を指定できます.
var a = 42.59
a.toFixed( 0 ); // "43"
a.toFixed( 1 ); // "42.6"
a.toFixed( 2 ); // "42.59"
a.toFixed( 3 ); // "42.590"
a.toFixed( 4 ); // "42.5900"
// 0 。
toPrecsion(.)メソッドは、有効な数ビットの表示桁数を指定するために使用される(四捨五入):var a = 42.59;
a.toPrecision( 1 ); // "4e+1"
a.toPrecision( 2 ); // "43"
a.toPrecision( 3 ); // "42.6"
a.toPrecision( 4 ); // "42.59"
a.toPrecision( 5 ); // "42.590"
a.toPrecision( 6 ); // "42.5900"
より小さい数値ほとんどのプログラミング言語では、次の問題に直面しています.
0.1 + 0.2 === 0.3; // false
解決方法は誤差範囲を設定することです.マシン精度といいます.この値は通常2^-52(2.22044604925033 e-16)です.ES 6から、この値はNumber.EPSILONに定義される.
function numbersCloseEnoughToEqual(n1,n2) {
return Math.abs( n1 - n2 ) < Number.EPSILON;
}
検査整数es 6では、Number.isInteger関数を提供して検査を行います.まず、整数フォーマットかどうかチェックして、jsが許可する範囲内にあるかどうかを確認します.
Number.isInteger( 42 ); // true
Number.isInteger( 42.000 ); // true
Number.isInteger( 42.3 ); // false
Number.isSafeInteger( Number.MAX_SAFE_INTEGER ); // true
Number.isSafeInteger( Math.pow( 2, 53 ) ); // false
Number.isSafeInteger( Math.pow( 2, 53 ) - 1 ); // true
32ビットは符号整数があります.最大53桁の整数がありますが、32桁の数字しか使えない数字がありますので、これらの安全範囲は小さいです.Math.pow(-2,31)(-2147483648,約-21億)からMath.pow(2,31)-1(21473647,約21億)になります.a 124 0は、変数aの中の数値を32ビットの符号付き整数に変換することができ、それは32ビットの整数にしか適用されないからである.したがって、0と操作すれば、aの32ビットの数を切り取ります.
nullとundefined
undefinedとは、一度も値を与えないことを意味します.nullは値を与えたことがありますが、まだありません.nullは特別なキーワードです.識別子ではなく、変数として使用できません.しかし、undefinedは識別子であり、変数として使用されたり、値が割り当てられたりすることができる.
function foo() {
undefined = 2; // !
}
foo();
function foo() {
"use strict";
undefined = 2; // TypeError!
}
foo();