JavaScriptの基本データ型と変換サンプルコードの詳細な紹介

黄舟
リリース: 2017-03-17 14:54:41
オリジナル
1044 人が閲覧しました

この記事では、基本的なデータ型と、非常に参考になるjavascriptの変換を中心に紹介します。エディターで見てみましょう

ECMAscriptには5つの基本的なデータ型があります: Unknown、Null、ブール値、数値、文字列。複雑なデータ型もあります。オブジェクトは、基本的に、順序付けされていない名前と値のペア (キーと値のペア) のセットで構成されます。 ECMAscript は、カスタム タイプを作成するメカニズムをサポートしていません。

ECMAscript は型付けが緩いため、変数のデータ型を検出する手段が必要です。Typeof はこの関数の演算子です。 typeof を使用して変数を検出すると、次の string のいずれかが返される場合があります:

"unknown" 変数は未定義です
"boolean" 変数はブール値です
"文字列「 変数は文字列です
「数値」 変数は数値です
「オブジェクト」 変数はオブジェクトまたはnullです
「関数」 変数は関数です

技術的な観点から見ると、ECMAscript の関数はデータ型ではなくオブジェクトです。ただし、関数には特別なプロパティがいくつかあるため、関数を他のオブジェクトと区別するには typeof を使用する必要があります。

未定義型には値が 1 つだけあり、それが特別な未定義です。 var を使用して変数が宣言されているが初期化されていない場合、次のように変数の値は未定義になります:

var a;
alert(a == undefined);  //true
ログイン後にコピー

ただし、未定義の値を含む変数は、次のような未定義の変数とは異なります。 、宣言されていない値または宣言された値は初期化されません。変数に typeof を使用すると、次のような未定義が返されます。

var a; // 这个变量声明之后默认取得了undefined值
// 下面这个变量并没有声明
// var b
alert(a);  // "undefined"
alert(b);  // 产生错误
ログイン後にコピー

Null 型には、null という値が 1 つだけあります。論理的な観点から見ると、null 値は null ポインタを表すため、typeof を使用して null 値を検出すると、次のような「オブジェクト」が返されます。変数を null に初期化するのが最善です。実際、未定義値は null 値を継承するため、それらが等しいと判断すると true が返されます:

var a;
// var b;
alert(typeof a); // "undefined"  
alert(typeof b); // "undefined"
ログイン後にコピー

null と unknown にはそのような関係がありますが、いつでも変更する必要がないため、用途はまったく異なります。変数の値は明示的に未定義に設定されますが、オブジェクトをまだ保存していないオブジェクト変数を定義する場合、変数は空のオブジェクトへのポインタとして null を反映するだけでなく、null に設定することもできます。 null と未定義を区別します。

ブール型には true と false の 2 つのリテラル値がありますが、ECMAscript のすべての型の値は、Boolean() 関数を呼び出すことでブール型の値に変換できます。次の表に、対応する変換規則を示します。各種データ型:


データ型

trueに変換された値 falseに変換された値String 非empタイ文字列 ""null 文字列 Number ゼロ以外の任意の数値 0 および NaN Object任意のオブジェクト nullUnknown/ 未定義

Number类型分为整数和浮点数,整数可以用十进制,八进制或十六进制表示,如:

var num1 = 22; //十进制整数
var num2 = 070; //八进制的56
var num3 = 079; // 无效的八进制,解析为十进制79
var num4 = 08; //无效的八进制,解析为十进制8
var num5 = 0xA; //十六进制的10
var num6 = 0x1f; //十六进制的31
ログイン後にコピー

但是八进制字面量在严格模式下是无效的,在进行算数计算时,所有的数值最终都会转换为十进制数值。浮点数值必须包含一个小数点,如:

var floatNum1 = 1.1;
var floatNum2 = .1; //有效,但不推荐
var floatNum3 = 1.; //小数点后面没有数字,解析为1
var floatNum4 = 10.0; //整数,解析为10
ログイン後にコピー

浮点数值的最高精度是17位小数,但在进行算数计算时精确度远不如整数,例如:

var a = 0.1;
var b = 0.2;
var c = a + b; //c的值为0.30000000000000004
ログイン後にコピー

NaN,即非数值,是一个特殊的Number值,NaN有两个特点:任何和NaN操作的结果都会返回NaN,NaN与任何值都不相等,包括NaN。使用isNaN()函数可以判断一个值是不是NaN,isNaN()在接收到一个参数时,会尝试将这个值转换为数值,任何不能转换为数值的值都会返回true,如:

alert(isNaN(NaN)); //true
alert(isNaN(10)); //false(10是一个数值)
alert(isNaN("10")); //false(可以被转换为数值10)
alert(isNaN("abc")); //true(不能转换为数值)
alert(isNaN(true)); //false(可以转换为数值1)
var obj = {name:"zhangsan", age:"1"};
alert(isNaN(obj)); //true
ログイン後にコピー

isNaN()也能转换对象,对象调用isNaN()时,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果不能,则用这个返回值再调用toString()方法,再测试返回值。

非数值转换成数值的方法有三个:Number()、parseInt()、parseFloat()。Number()可以转换任何数据类型的值,而parseInt()和parseFloat()只能转换字符串。

Number()函数有以下转换规则:

1.如果是Boolean值,true转换为1,false转换为0;

var num = Number(true); //1
var num2 = Number(false); //0
ログイン後にコピー

2.如果是Number值,就和传入的值一样;

var num = Number(1);    //1
ログイン後にコピー

3.如果是null,转换为0;

var num = Number(null);    //0
ログイン後にコピー

4.如果是undefined,转换为NaN;

var num = Number(undefined);    //NaN
ログイン後にコピー

5.如果是String值,要分多种情况,如果是空字符串,则转换为0;如果是纯数字的字符串,则将其转换为相对应的数值,如果字符串是数字且包含".",则将其转换为对应的浮点数值(如果字符串最前面是0,会被忽略),如果字符串是有效的十六进制格式,会将其转换为对应的十进制数值;如果字符串包含上述格式之外的字符,则转换为NaN;如果字符串是对象,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果结果是NaN,则调用toString()方法,再测试返回值。

var num = Number("Hello World"); //NaN
var num2 = Number(""); //0
var num3 = Number("01"); //1
var num4 = Number("01.1"); //1.1
var obj = {name:"zhangsan", age:"1"};
alert(Number(obj)); //NaN
ログイン後にコピー

由于Number()在转换字符串是比较复杂,所以转换字符串常用parseInt()和parseFloat()。这两个函数在转换字符串时,会检测该字符串是否符合数值模式,从第一个非空格字符开始解析,如果第一个字符不是数值或者负号,则返回NaN(包括空字符串)。如果第一个字符是字符串,则继续解析后面的字符,直到解析完所有的字符或者遇到非数字字符。

parseInt()能够识别各种整数格式(十进制、八进制、十六进制),如果字符串以"0x"开头且后跟数字字符,就会被解析为十六进制,如果以"0"开头且后跟数字字符,则会被解析为八进制(ECMAscript5不识别八进制,会将前面的0忽略,解析为十进制)。

var num = parseInt("123Hello"); //123
var num2 = parseInt("");     //NaN
var num3 = parseInt("0xA");   //10(十六进制)
var num4 = parseInt("22.3"); //22
var num5 = parseInt("070"); //56(ECMAscript3八进制) 70(ECMAscript5十进制)
var num6 = parseInt("23"); //23(十进制)
ログイン後にコピー

为了解决兼容性问题,parseInt()提供第二个参数,以何种数值格式解析。

var num1 = parseInt("0xAF", 16);  //175
var num2 = parseInt("AF", 16);  //175,可以省略前面的"0x"
var num3 = parseInt("10", 2);  //2(二进制)
var num3 = parseInt("10", 8);  //8(八进制)
var num3 = parseInt("10", 10);  //10(十进制)
var num3 = parseInt("10", 16);  //16(十六进制)
ログイン後にコピー

parseFloat()只识别第一个小数点,后面的小数点就无效了,同时parseFloat()只识别是十进制值,所以没有第二个参数,别的格式数值会被解析为0。

var num = parseFloat("123Hello");  //123
var num = parseFloat("0xA");  //0
var num = parseFloat("12.1");  //12.1
var num = parseFloat("12.1.1");  //12.1
var num = parseFloat("023");  //23
var num = parseFloat("1.1e3");  //1100
ログイン後にコピー

String类型值由若干个Unicode字符组成的字符序列构成,可以由单引号('')或者双引号("")表示,但是左右引号必须匹配。

var str1 = "abc";
var str2 = &#39;abc&#39;;<br>var str3 = "abc&#39;; //语法错误
ログイン後にコピー

将一个值显式转换为字符串有两种方法,toString()和String(),数值、布尔值、对象和字符串都有toString()方法和String()方法,而undefined和null只有String()方法,toString()的参数是转换的进制格式。

var num = 10;
alert(num.toString());  //"10"
alert(num.toString(2));  //"1010"
alert(num.toString(8));  //"12" 
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"A"
alert(true.toString());  //"true"
String(num);  //"10"
String(true);  //"true"
String(null); //"null"
var num1;
String(num1); //"undefined"
ログイン後にコピー

以上がJavaScriptの基本データ型と変換サンプルコードの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
Booleantru​​e