JavaScript-数据类型

简介: 数据类型

壹-数据类型

ECMAScript有6种简单的数据类型:undefined、null、boolean、number、string和symbol。其中symbol是ECMAScript新增的数据类型。

ECMAScript还有一种复杂数据类型:Object(对象)

1、typeof操作符

typeof操作符用来确定变量的数据类型。对一个值使用typeof,会返回下面的字符串之一:

含义
undefined 表示值未定义
boolean 表示值为布尔值
string 表示值为字符串
number 表示值为数值
object 表示值为对象
function 表示值为函数
symbol 表示值为符号

例如下面的例子:

letuserName='zhangsan';
console.log(typeofuserName);       //输出  stringconsole.log(typeof(userName));      //输出  stringconsole.log(typeof99);             //输出  numberconsole.log(typeofnull);           //输出  Object


上述代码中的最后一行,可能令人比较费解,明明是个空值,为什么会输出object呢?这是因为特殊值null被认为是一个对空对象的引用。

2、undefined类型

undefined 类型只有一个值,就是特殊值 undefined。当使用 var 或 let 声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值。

letage;
console.log(age==undefined);      //输出为true

注意:声明了一个变量未赋值,和未定义一个变量是有区别的;

letuserName;
//let age;console.log(userName);      //输出为   undefinedconsole.log(age);           //报错,因为age未定义

3、null类型

null 类型同样只有一个值,即特殊值 null。逻辑上讲, null 值表示一个空对象指针,这也是给typeof 传一个 null 会返回"object"的原因。

letcat=null;

console.log(typeofcat);        //输出   object

在定义将来要保存对象值的变量时,建议使用 null 来初始化,不要使用其他值。

undefined 值是由 null 值派生而来的,所以:

console.log(undefined==null);    // true

但是他俩的用途是不一样的,可不能混淆。就像上述所说的,如果声明一个变量但是并未赋予其值,那么该变量就是undefined。但是null却不是这样,只要变量要保存对象,但是又没有那个对象存在,就先用null占着位置。

4、boolean类型

boolean(布尔值)类型是 ECMAScript 中使用最频繁的类型之一,有两个字面值: truefalse。这两个布尔值与数值不同,true不等于1,false不等于0

letsee=false;
letsay=true;
letmessage='Hello World!';
letmessageBoolean=Boolean(message);  //Boolean()转型函数

不同类型的值,可以通过Boolean() 转化为布尔值。见下表:

数据类型 转化为true 转化为false
boolean true false
string 非空字符串 "" (空字符串)
number 非零数值(包括无穷) 0, NaN
object 任意对象 null
undefined N/A(不存在) undefined

理解以上转换非常重要,因为像 if 等流控制语句会自动执行其他类型值到布尔值的转换。

letuserName='lisi';
if(userName){
console.log('可以执行!')
}

5、number类型

number类型使用 IEEE 754 格式表示整数和浮点值(在某些语言中也叫双精度值,死去的计算机组成原理突然攻击我)。

可以使用的进制数又十进制,八进制,十六进制。

letinitNum=55;     //十进制letoNum=070;     //八进制,转化为十进制数是56;letoNum1=079;    //无效的八进制数,当做十进制数79处理letoNum2=080;    //无效的八进制数,当做十进制数80处理letoxNum=0xA;     //十六进制10letoxNum=0x1f;   //十六进制31

浮点数

要定义浮点数,数值中必须有小数点,而且小数点后面必须有一个数字。

letfloatNum1=1.1;

letfloatNum2=0.1;

letfloatNum3=.1; // 有效,但不推荐

在小数点后面没有数字的情况下,数值就会变成整数。因为浮点数存储站空间。

对于非常大或非常小的数值,浮点值可以用科学记数法来表示。

letfloatNum=3.125e7;     //等于31250000

注意:ECMAScript表示值的时候是有限制的,并不是能够表示所有的值。ECMAScript 可以表示的最小数值保存在 Number.MIN_VALUE 中,这个值在多数浏览器中是 5e-324。可以表示的最大数值保存在Number.MAX_VALUE 中,这个值在多数浏览器中是 1.797 693 134 862 315 7e+308。

尽管超过表示范围的数值并不多见,但还是要注意下,要检测是否超过表示范围。

NaN,这个很常见嗷,兄弟们

有一个特殊的数值叫 NaN,意思是“不是数值”( Not a Number),用于表示本来要返回数值的操作失败了(而不是抛出错误)。

console.log(0/0);       // NaNconsole.log(-0/+0);     // NaN//如果分子是非 0 值,分母是有符号 0 或无符号 0,则会返回 Infinity 或-Infinityconsole.log(5/0); // Infinityconsole.log(5/-0); // -Infinity

NaN有几个特点。任何涉及到NaN的操作都会返回NaNNaN不等于任何值,包括NaN本身。

ECMAScript 提供了 isNaN()函数,用来判断一个值是否是NaN,如果是,它会尝试着把它变为数值。

console.log(isNaN(NaN)); // trueconsole.log(isNaN(10)); // false, 10 是数值console.log(isNaN("10")); // false,可以转换为数值 10console.log(isNaN("blue")); // true,不可以转换为数值console.log(isNaN(true)); // false,可以转换为数值 1

6、数值转换

有三个函数可以将数值转化为非数值。

函数 功能特性
Number() 1、转型函数,可以用于任何类型的值;2布尔值, true 转换为 1, false 转换为 0;3、数值,直接返回;4、null,返回 0;5、undefined,返回 NaN
parseInt() 主要用于将字符串转化为数值,通常在需要得到整数时可以优先使用 parseInt()函数
parseFloat() 主要用于将字符串转化为数值

Number()函数转化字符串时:

①如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。因此, Number("1")返回 1, Number("123")返回 123, Number("011")返回 11(忽略前面的零)。

②如果字符串包含有效的浮点值格式如"1.1",则会转换为相应的浮点值(同样,忽略前面的零)。

③如果字符串包含有效的十六进制格式如"0xf",则会转换为与该十六进制值对应的十进制整数值。

④如果是空字符串(不包含字符),则返回 0。⑤如果字符串包含除上述情况之外的其他字符,则返回 NaN。


letnum1=Number("Hello world!"); // NaNletnum2=Number(""); // 0letnum3=Number("000011"); // 11letnum4=Number(true); // 1letnum1=parseInt("1234blue"); // 1234letnum2=parseInt(""); // NaNletnum3=parseInt("0xA"); // 10,解释为十六进制整数letnum4=parseInt(22.5); // 22letnum5=parseInt("70"); // 70,解释为十进制值letnum6=parseInt("0xf"); // 15,解释为十六进制整数letnum1=parseFloat("1234blue"); // 1234,按整数解析letnum2=parseFloat("0xA"); // 0letnum3=parseFloat("22.5"); // 22.5letnum4=parseFloat("22.34.5"); // 22.34letnum5=parseFloat("0908.5"); // 908.5letnum6=parseFloat("3.125e7"); // 31250000

7、String类型

String(字符串)数据类型表示零或多个 16 位 Unicode 字符序列。

字符串可以使用双引号( ")、单引号( ')或反引号( `)标示。

letfirstName="John";
letlastName='Jacob';
letlastName=`Jingleheimerschmidt`

除了这些以外,还有字符字面量

字面量 含义
\n 换行
\t 制表
\b 退格
\r 回车
\f 换页
\\ 反斜杠
\' 单引号( '),在字符串以单引号标示时使用,例如'He said, \'hey.\' '
\" 双引号( "),在字符串以双引号标示时使用,例如"He said, \"hey.\""
\` 反引号( `),在字符串以反引号标示时使用,例如`He said, \`hey.\``
\xnn 以十六进制编码 nn 表示的字符(其中 n 是十六进制数字 0~F),例如\x41 等于"A"
\unnnn 以十六进制编码 nnnn 表示的 Unicode 字符(其中 n 是十六进制数字 0~F),例如\u03a3 等于希腊字 符"Σ"

ECMAScript 中的字符串是不可变的( immutable),意思是一旦创建,它们的值就不能变了。要修改某个变量中的字符串值,必须先销毁原始的字符串,然后将包含新值的另一个字符串保存到该变量。

letlang="Java";
lang=lang+"Script";
//整个过程首先会分配一个足够容纳 10 个字符的空间,然后填充上"Java"和"Script"

转化为字符串

toString()方法。这个方法唯一的用途就是返回当前值的字符串等价物。

letage=11;
letageAsString=age.toString(); // 字符串"11"letfound=true;
letfoundAsString=found.toString(); // 字符串"true"

toString()方法可见于数值、布尔值、对象和字符串值。nullundefined 值没有 toString()方法。

通过传入参数,可以得到数值的二进制、八进制、十六进制,或者其他任何有效基数的字符串表示。

letnum=10;
console.log(num.toString()); // "10"console.log(num.toString(2)); // "1010"console.log(num.toString(8)); // "12"console.log(num.toString(10)); // "10"console.log(num.toString(16)); // "a"

如果你不确定一个值是不是 null 或 undefined,可以使用 String()转型函数,它始终会返回表示相应类型值的字符串。String()函数遵循下面的规则:

1、如果值有 toString()方法,则调用该方法(不传参数)并返回结果。

2、如果值是 null或undefined,返回"null"  或  "undefined"。

letvalue1=10;
letvalue2=true;
letvalue3=null;
letvalue4;
console.log(String(value1)); // "10"console.log(String(value2)); // "true"console.log(String(value3)); // "null"console.log(String(value4)); // "undefined"

ECMAScript 6 新增了使用模板字面量定义字符串的能力。与使用单引号或双引号不同,模板字面量保留换行字符,可以跨行定义字符串。模板字面量在定义模板时特别有用,比如定义HTML代码。格式正确的模板字符串看起来可能会缩进不当

letmyMultiLineString='first line\nsecond line';
letmyMultiLineTemplateLiteral=`first linesecond line`;
console.log(myMultiLineString);
// first line// second line"console.log(myMultiLineTemplateLiteral);
// first line// second lineconsole.log(myMultiLineString===myMultiLinetemplateLiteral); // trueletpageHTML=`<div><a href="#"><span>Jake</span></a></div>`;

字符串插值

模板字面量最常用的一个特性是支持字符串插值,也就是可以在一个连续定义中插入一个或多个值。模板字面量在定义时立即求值并转换为字符串。

letvalue=5;
letexponent='second';
// 以前,字符串插值是这样实现的:letinterpolatedString=value+' to the '+exponent+' power is '+ (value*value);
// 现在,可以用模板字面量这样实现:letinterpolatedTemplateLiteral=`${value}to the ${exponent}power is ${value*value}`;
console.log(interpolatedString); // 5 to the second power is 25console.log(interpolatedTemplateLiteral); // 5 to the second power is 25

所有插入的值都会使用 toString()强制转型为字符串。


12-8.jpg

相关文章
|
5月前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
162 59
|
2月前
|
存储 JavaScript 前端开发
JavaScript中的数据类型以及存储上的差别
通过本文的介绍,希望您能够深入理解JavaScript中的数据类型及其存储差别,并在实际编程中灵活运用这些知识,以提高代码的性能和稳定性。
65 3
|
3月前
|
存储 JavaScript 前端开发
js中的数据类型
JavaScript 中的数据类型包括五种基本类型(String、Number、Undefined、Boolean、Null)和三种引用类型(Object、Array、Function,以及ES6新增的Symbol)。基本类型直接存储值,引用类型存储的是指向实际数据的内存地址。了解它们的区别对于掌握 JavaScript 的变量赋值和函数传参至关重要。
54 1
|
4月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
194 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
4月前
|
JavaScript 前端开发 开发者
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
54 1
|
5月前
|
JavaScript 前端开发
JavaScript基础知识-基本数据类型和引用数据类型
关于JavaScript基础知识的文章,主要介绍了基本数据类型和引用数据类型。
56 2
JavaScript基础知识-基本数据类型和引用数据类型
|
5月前
|
存储 前端开发 JavaScript
前端基础(三)_JavaScript数据类型(基本数据类型、复杂数据类型)
本文详细介绍了JavaScript中的数据类型,包括基本数据类型(Number、String、Boolean、Undefined、Null)和复杂数据类型(Object),并解释了如何使用`typeof`操作符来识别变量的数据类型。同时,还讨论了对象、函数和数组等复杂数据类型的使用方式。
127 2
|
4月前
|
存储 JavaScript 前端开发
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
94 0
|
6月前
|
JavaScript 前端开发
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
这篇文章是JavaScript基础与实战教程的第一部分,涵盖了JavaScript的基本语法、标识符、数据类型以及如何进行强制类型转换,通过代码示例介绍了JS的输出语句、编写位置和数据类型转换方法。
JavaScript基础&实战(1)js的基本语法、标识符、数据类型
|
6月前
|
开发者 图形学 开发工具
Unity编辑器神级扩展攻略:从批量操作到定制Inspector界面,手把手教你编写高效开发工具,解锁编辑器隐藏潜能
【8月更文挑战第31天】Unity是一款强大的游戏开发引擎,支持多平台发布与高度可定制的编辑器环境。通过自定义编辑器工具,开发者能显著提升工作效率。本文介绍如何使用C#脚本扩展Unity编辑器功能,包括批量调整游戏对象位置、创建自定义Inspector界面及项目统计窗口等实用工具,并提供具体示例代码。理解并应用这些技巧,可大幅优化开发流程,提高生产力。
567 1

热门文章

最新文章