ホームページ >ウェブフロントエンド >jsチュートリアル >Javascriptの型変換方法_JavaScriptスキル

Javascriptの型変換方法_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 18:17:561067ブラウズ

JavaScript の変数は、簡単に使用できるように、適用可能な (または必須の) コンテンツへの自由な型変換もサポートしています。

弱い型指定の Javascript は、プログラマが望むように実際の変数型から必要なデータ型に変換しません。たとえば、ブラウザ スクリプトでよくある間違いは、ユーザーがフォーム コントロールから必要なものを取得することです。 1 つの入力数値変数と別の数値変数の合計。フォームコントロールの変数タイプは文字列であるため(タイミング文字列シーケンスには数値が含まれます)、この試行ではその文字列が変数に追加されます。たとえ値が数値であったとしても、2番目の変数の結果は変換されます。文字列型の場合、フォームコントロールから取得した変数のみが最後に最初の文字列の末尾に追加されます。

Boolean 型に変換

式が if などの判定の場合、型変換の結果は判定用の Boolean 型になります。これらの判定には、AND (&&)、OR (||)、NOT (!) などの論理演算が含まれます。 not 演算は変数を bohr 型に変換し、変数が bohr 型の場合は true になります。その場合は false を返し、それ以外の場合は true を返します。 2 つの非演算は、ボーア型に変換された変数と同等の値を返します。
var boolValue = !!x;
この手法は後で使用します。
もう 1 つの方法は、ターゲットをパラメーターとしてブール型コンストラクターに渡すことです。
var boolValue = Boolean(x);
(1) 数値型を Boolean に変換すると、値 0 が false になり、その他の値が true になります。特殊な数値 NaN (Not a Number) を除き、NaN は、意味のある数値が返されない場合に他の型を数値型に変換するときに使用されます。 NaN は常に false を返します。 無限に大きいか、無限に小さいか、あるいは有限の値であっても、0 でない限り、ブール値に変換すると常に true を返します。
(2) 文字列型の変換規則は単純です。文字列型からブール型への変換は、空の文字列の場合は false を返します。
(3) 他の型の場合、unknown と null は false を返し、Object 型と関数型は常に true を返します。
これは、オブジェクトが未定義オブジェクトかどうかを判断する必要がある場合に最も価値のある関数です。未定義の変数(未定義またはnull)を呼び出すとエラーが発生します。これらが不確実な場合 (通常、Web ブラウザーが考慮するもの)、コード エラーを避けるために、オブジェクトに対して if 判断を行う必要があります。オブジェクトを式として使用し、Bol 型に変換することをお勧めします。 false が返された場合、オブジェクトは存在しません。 true が返された場合、オブジェクトは存在します。
if(document.documentElement){
scrollX = document.documentElement.scrollLeft;
}
2 つの非操作によって、オブジェクトが使用できるかどうかが決まります。

コードをコピー コードは次のとおりです。

var hasDocEl = !!document.documentElement;
...
if(hasDocEl){
scrollX = document.documentElement.scrollLeft;


转换到字符串类型


另外一种可选择的方法就是把目标作为参数传递给 String 构造函数。

var stringValue = String(x);

注意上面数值 123e-2 已经被转换为字符串 "1.23" ,因为已经由科学计数法转换为普通表达式了。然而,Javascript 的本质数值类型是来自于IEEE的双精度浮点类型,这就意味着只能储存有限的精度。数学操作结果可能只能产生近似的值。当他们转换到字符串时,可能会收到意想不到(指坏的)的结果。所以常常需要设置特定的定制函数用以获得可接受的结果。这种类型转换机制难以保证正常结果。

当一个对象或者函数被转换为字符串时,他们的 toString 方法将会被调用。默认会执行 Object.prototype.toString 以及Function.prototype.toString 除 除非重写 "toString" 方法。把一个函数转换到字符串,返回结果并非是必须的.Function.prototype.toString 方法就能完成大部分需要,它将会返回 "host objects" 和方法(这个对象和方法取决于不同环境,比如 DOM 元素)。

转换到数值型

转换到数值类型,特别是由字符串转换到数值类型,有很多通用的方法,任何数学操作方法除了加法( + )都会执行类型转换。所以转换字符串类型到数值类型可以使之与一个数值操作,比如减去零或者乘以一。

var numValue = stringValue - 0;

/* or */

var numValue = stringValue * 1;

/* or */

var numValue = stringValue / 1;

但是 + (取正)操作还是可以转换字符串类型到数值类型。因为他不做任何计算操作,所以这种方法是最快的。

顺便一提,相反数操作 - 同样也会执行类型转换,使得目标成为相反的结果。

var numValue = (+stringValue);

/* 这是不必要的,在 + 操作后已经被添加了括弧,只是为了使得代码更容易被人理解并且使得他很清楚,特别是避免了与添加和连续操作相混淆。


+ (取正)操作是最快的转换字符串类型到数值类型的方法。传递给 Number 构造函数一个参数,它将会执行类型转换并且返回一个数值类型。
var numValue = Number(stringValue);
Number构造函数是最慢的类型转换方法,但是当速度不是所考虑的关键时,使用它能够使得代码变得很干净。

对于其他类型,Objects 和 functions 总是被转换为 NaN 。undefined 与 null 同样代表没有东西,但是只有 null 被转换为数值零。可能是因为他们先被转换为波尔型,然后才转换为数值型,在上文中转换为波尔型的结果已经很清楚了, null 转换为波尔型将会返回 false 。它将会变为数值零。他们几乎都不必转换为数值类型,他们如何进行转换的真正意义在于为了考虑一些偶然的结果,要转换一个字符串时,结果返回的是他们这些(或者是由于进行了一些数学计算操作才返回了这些)。

parseFloat

对于 parseFloat 解析空字符串将会返回对于 parseFloat 解析空字符串将会返回 NaN ,是因为空字符串不属于数字表达式。指数可以被解析,由0起头的八进制不会阻止字符串解析为十进制数。十六进制数却因为 "x" 无法作为数字被解析而停止解析而返回一个零。

非字符串类型转换成为快速转换,作为一个字符串传递给 parseFloat 。当那些类型转换作为字符串时不在是正常的结果,它的解析结果是 NaN,Objects 和 functions 。可能有自定义 toString 方法返回字符串将会被解析成为数值,这是一个特殊的要求。

parseInt
parseInt 函数的工作方式和parseFloat 有些相似,不同之处在于它是尝试把字符串转换为整型数值,只能辨认几个少数作为数字的符号。

The parseInt function is occasionally used to convert single-precision floating-point numerical types to integers. Since this conversion first requires conversion from string type to single-precision numeric type, it is not suitable. In addition, because it will generate some errors, it becomes very inefficient. For example, the correct return value of the scientific notation value 2e-200 should be zero, but parseInt returns 2. And due to Javascript formatting, values ​​are often returned as approximations. For example, 1/2 1/3 1/6 = 0.9999999999999999. The approximate value of the result of this expression should be 1, but parseInt returns 0.
Math.round, Math.ceil and Math.floor, which can obtain approximate values, are more suitable for this job. In order to obtain the result, the expression will be treated as a 32-bit signed integer. This rule also applies to the following situations.

Note that the Math.round function performs common rounding. 0.4 and below will be ignored, and 0.5 and above will be added by 1. The Math.ceil function adds 1 whenever there is a decimal. The Math.floor function is ignored regardless of the size of the decimal. It can be seen from the definitions of these functions that the parseInt method treats decimals in the same way as Math.floor.

ToInt32
ToInt32 is a built-in function that, although useful, cannot be called directly like parseInt. There are some unusual ways to use it to convert Javascript variables to numbers. But it can be used in some limited situations. Bitwise operations, such as bitwise OR (|) and bitwise AND (&) that operate on numeric values, can be converted to numeric types when operating with them. But they only work in 32-bit signed integers, so we can return the converted 32-bit signed integer variable (for type conversion) by calling the built-in function ToInt32. The result is just like after calling the parseInt function, except that the result is limited to 32 bits, so they are all numerical values, without NaN or Infinity. Even if you operate with a null value, the result returned is a numerical value. Using a bit operation will not affect the result, but you can call the ToInt32 function.

Even undefined, objects and functions are converted to 0, and the boolean true is converted to the value 1.

Article author: Gao Weipeng (Brian)
Article source: http://www.cnblogs.com/gaoweipeng

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。