我需要将任意JavaScript数字转换为包含JavaScript表达式的字符串,这些字符串必须保证其值与原始数字相同。
通常,String()
适用于大多数值,但值得注意的是String(-0)
返回'0'
,尽管0 === -0
,Object.is(0, -0)
返回false。
是否还有其他数字值n
不能返回eval(String(n))
的值?我特别考虑的是浮点数不能精确地用十进制表示的情况,并且由于四舍五入/精度不足,表示n
选择的结果求值到附近但不同的浮点数。
如果是,我如何获得这些数字的String()
-able字符串表示形式?
答案 0 :(得分:2)
String(x)
是唯一的例外。引用the spec(注1):
如果x是除-0以外的任何Number值,则ToNumber(ToString(x))与x完全相同。
请注意,ToString(x)
的行为是当x
不是符号(spec)之外的其他任何东西时,简单地调用console.log( String(1e2) );
console.log( Object.is(1e2,100) );
。
将数字转换为字符串时,精度永远不会丢失。格式可能与原始格式不同,但始终代表相同的数字:
Infinity
如@ASDFGerte所述,NaN
和Infinity
可能被遮盖。因此,您可能还想为-Infinity
,NaN
和function reversibleNumberToString( x ) {
if ( Object.is( -0, x ) )
return '-0';
const str = String(x);
switch ( str ) {
case 'Infinity':
return '1/0';
case '-Infinity':
return '-1/0';
case 'NaN':
return '0/0';
default:
return str;
}
}
// Tests
[ 0, 1, Math.random( ), -Infinity, Infinity, NaN ].forEach( x => {
const Infinity = 'shadowed';
console.log( Object.is( x, eval( reversibleNumberToString( x ) ) ) );
} );
添加例外。也许像这样:
$ad = Get-AdObject...
$obj1 = New-Object -TypeName PSCustomObject -property $ad
$hash = @{
'col1'='header1';
'col2'='header2';
...
}
$obj2 = New-Object -TypeName PSCustomObject -property $hash
$arr1 = @()
$arr1 += $obj2, $obj1
$arr1 | Export-csv -path...
答案 1 :(得分:-4)
具有编号功能
例如:
Number('0') === 0 // true