JavaScript类型:数据类型

本文详细介绍了JavaScript中的数据类型,包括Undefined、Null、Boolean、Number、String和Object。讨论了如何使用typeof操作符检测数据类型,以及Number()、parseInt()和parseFloat()函数进行数值转换的规则。此外,还探讨了JavaScript中数字的表示范围、NaN特性以及字符串的不可变性等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,数据类型:

     基本数据类型:Undefined   Null  Boolean  String  Number Symbol(es6新增,后续在说。。)

     引用数据类型:  Object 

     typeof 操作符用来检测给定变量的数据类型

 1,Undefined:

        Undefined 表示未定义,即在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined,只有一个值,类型就是Undefined类型;

         例如:下面案例只声明了msg,并没有对其进行初始化,返回true,已声明 未经初始化的值 默认就会是undefined;

             

       对于没有声明过得变量,只能执行一步操作,使用typeof操作符检测其数据类型,

  2,Null:

        Null类型 也是只有一个值得数据类型,这个特殊值是null,表示 ‘定义了但为空’。null表示一个空对象指针,也是使用typeof操作符检测null值时会返回“object”的原因,如下示例:

var msg = null; 

console.log(typeof msg);//object

      如果定义的变量在将来用于保存对象,可将该变量初始化为null,而不是其他值,这样只要直接检查null值就可知道相应的变量是否已经保存了一个对象的引用,如下示例:

if(msg != null){
    //对msg对象执行操作
}

    null与undefined不同 null是关键字,所以在任何代码中,都可以放心使用null关键字来获取null值    

3,Boolean:

      Boolean类型是使用最多的一种类型,有两个值:true和false,表示逻辑意义上的真和假,区分大小写,

     要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean();如下示例:

var msg = "hello";
var msgAsBoolean = Boolean(msg)
console.log(msgAsBoolean)// true

 上面示例中 字符串 msg 被站转换成了一个Boolean值,该值被保存在 msgAsBoolean变量中,可以对任何数据类型的值调用 Boolean()函数,而且总会返回一个Boolean值;

各种数据类型及其对应的转换规则:

数据类型转换为true的值转换为false的值
Boolean truefalse
String任何非空的字符串空字符串(' ')
Number任何非0的数字值(包括无穷大)0和NaN
Object任何对象null
Undefinedn/a(不适用)undefined

4,Number类型:

    (1) Number类型表示我们通常意义上的“数字”.。Number类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值),最基本的数值字面量格式是十进制整数,除十进制表示外,整数还可以通过八进制或者十六进制来表示;

   十进制整数可以直接在代码中输入,如 :

var num = 21

 八进制的字面值得第一位必须是零(0),然后是八进制数字序列(0 - 7),如果字面值中的数值超出了范围,前导零将被忽略,后面的数值将被当做十进制数值解析;

  十六进制字面值得前两位必须是0x,后跟任何十六进制数字(0-9及A-F)字母 A - F可大写 也可小写。

 在进行算数计算时,所有以八进制和十六进制表示的数值最终豆浆被转换成十进制数值;

(2)JavaScript中有+0和-0,在加法类运算中它们没有区别,但是出发的场合则需要特别留意区分:忘记检测除以-0,而得到负无穷大的情况经常会导致错误,而区分+0和-0的方式,正是检测1/x是 Infinity 还是 -Infinity;

    要想确定一个数值是不是位于最小和最大的数值之间,可以使用isFinite() 函数,这个函数在参数位于最小与最大数值之间时会返回true,如下示例:

var result = Number.MAX_VALUE + Number.MAX_VALUE;
console.log(isFinite(result)) //false

(3)根据双精度浮点数的定义:

          Number类型中有效的整数范围是-0x1fffffffffffff 至 0x1fffffffffffff,所以Number无法精确表示此范围外的整数;

          非整数的Number类型无法用 ==(===)来比较:如

 console.log(0.1 + 0.2 == 0.3)  结果为 false 

    输出结果为false ,说明两端不相等,浮点数的运算精度问题导致等式左右的结果并不是是严格相等,二十差了个微小的值,正确的比较方法是使用JavaScript提供的最小精度值:

console.log(Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON) //true

  检查等式两边差的绝对值是否小于最小精度,才是正确的比较浮点数的方法。

 (4)NaN 非数值,任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括NaN本身,如下示例:结果为false

console.log(NaN == NaN) //false

 

5,String类型:

        String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。可用引号( " )或者单引号( ' )来表示,如下示例:

var name = "lanlan";
var yname = 'lanlan';

 (1)String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,这些字符字面量可以出现在字符串中的任意位置,也将被作为一个字符来解析;

        如下表是常用字符字面量:

        

字面量含义
\n换行
\t制表
\b退格
\r回车
\\斜杠

 

  (2)字符串是不可变得,字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值得字符串填充该变量,例如:

var name = "Java";
var yname = name + 'Script';
console.log(yname)//JavaScript

  (3)String有最大长度2^53 - 1,这个所谓最大长度并不完全是你理解中的字符数,因为String的意义并非字符串,而是字符串的UTF16编码,字符串的操作 charAt,charCodeAt,lenght等方法针对的都是UFT16编码,所以字符串的最大长度实际上是瘦字符串的编码长度影响的;

 (4)转换为字符串,要把一个值转换为一个字符串有两种方式,第一种是 toString() 方法,另一个种是String()函数;

       toString()方法:返回相应值的字符串表现:例如:

var name = 11;
var yname = name.toString();
console.log(yname)//字符串 ‘11’

var f = true;
var ft = f.toString();
console.log(ft)//true

   多数情况调用toString()方法不用传递参数,但在调用数值的toString()方法时,可以传递一个参数,输出数值的基数,默认的情况下,toString()方法以十进制格式返回数值的字符串表示,通过传递基数,toString() 方法可以输出以二进制 八进制 十六进制 乃至其他人以有效进制格式表示的字符串值,例如:

var num = 11;

console.log(num.toString())// '11'

console.log(num.toString(2))// '1011'

console.log(num.toString(8))// '13'

console.log(num.toString(10))// '11'

console.log(num.toString(16))// 'b'

   在不知道要转换的值是不是null或者undefined的情况下 可以使用转换型函数String(),能够将任何类型的值转换为字符串,String()函数遵循如下转换规则:

   如果有toString()方法,则调用该方法(没有参数)并返回相应的结果;

   如果值是null,则返回 ‘null’  ;

   如果值是undefined 则返回 'undefined' ;

 如下示例:

var num1 = 11;
var num2 = true;
var num3 = null;
var num4;

console.log(String(num1))// '11'

console.log(String(num2))// 'true'

console.log(String(num3))// 'null'

console.log(String(num4))// 'undefined'

 

6,Object类型:

   Object表示对象的意思,是一组数据和功能的集合,对象可以通过new操作符后跟要穿件的对象类型的名称来创建,如下示例:

var n = new Object();

 在 ECMAScript中,Object类型是所有它的实例的基础,即 Object所具有的任何属性和方法也同样存在于更具体的对象中,

 Object的每个实例都具有下列属性和方法:

 constructor:保存着用于创建单签对象的函数。对于前面的例子而言,构造函数就是Object();

 hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在,其中,作为参数的属性名(propertyName)必须以字符串形式指定 例如:

a.hasOwnProperty("name")

 isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型。

propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句类枚举,与hasOwnProperty()方法一样作为参数的属性名 必须以字符串形式指定;

toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;

toString():返回对象的字符串;

valueOf():返回对象的字符串,数值或布尔值,通常与toString()返回值相同;

 

二,数值转换:

Number()函数,parseInt()函数,parseFloat()函数 可以把非数值转换为数值;

 (1)  Number()可以用于任何数据类型,转换规则如下:

 如果是Boolean值,true和false将分别被转换为1和0;

如果是数字值,只是简单的输入和返回;

如果是null值,返回0;

如果是undefined,返回NaN;

如果是字符串,则遵循如下规则:

   如果字符串只包含数字,则将其转换为十进制数值,即“1”会变成 1,"321"会变成321,而"011"会变成11;

  如果字符串中包含有效的十六进制格式,例如 "0xf",则将其转换为相同大小的十进制数值;

  如果字符串是空的,不包含任何字符,则将其转换为0;

  如果字符串中包含除上述格式之外的字符,则将其转换为NaN;

  如果是对象 则调用对象的 valueOf()方法,如果转换的结果是 NaN,则调用toString()方法;

  如下Number()转换示例:



var num1 = Number('hello');
var num2 = Number('');
var num3 = Number('000011');
var num4 = Number(true);



console.log(num1)// 'NaN'

console.log(num2)// '0'

console.log(num3)// '11'

console.log(num4)// '1'

 (2)  parseInt()函数转换规则:

     parseInt()在转换字符串时,更多的是看其是否符合数值模式,会忽略字符串前面的空格,直至找到第一个非空格字符。

    如果第一个字符不是数字字符或者负号,parseInt()会返回NaN。

    如果第一个字符是数字字符,parseInt()会继续解析第二个字符,知道解析完所有后续字符或者遇到了一个非数字字符。

   示例如下:

var num1 = parseInt('1234hello');
var num2 = parseInt('');
var num3 = parseInt('0xA');
var num4 = parseInt(22.6);
var num5 = parseInt('070');
var num6 = parseInt('70');


console.log(num1)// '1234'

console.log(num2)// 'NaN'

console.log(num3)// '10' 十六进制数

console.log(num4)// '22'

console.log(num5)// '70'

console.log(num6)// '70' 十进制数

   parseInt()可以指定基数进行转换 指定基数会影响转换结果。示例如下:

var num1 = parseInt('10','2');
var num2 = parseInt('10','8');
var num3 = parseInt('10','10');
var num4 = parseInt('10','16');



console.log(num1)// '2' 按二进制进行解析

console.log(num2)// '8' 按八进制进行解析
 
console.log(num3)// '10' 按十进制进行解析

console.log(num4)// '16' 按十六进制进行解析

 

(3)  parseFloat()函数转换规则:

   示例如下:

var num1 = parseFloat('11234abck');
var num2 = parseFloat('0xA');
var num3 = parseFloat('22.5');
var num4 = parseFloat('22.34.5');
var num5 = parseFloat('0908.5');
var num6 = parseFloat('3.125e7');

console.log(num1)// '11234' 
console.log(num2)// '0' 
console.log(num3)// '22.5' 
console.log(num4)// '22.34' 
console.log(num5)// '908.5' 
console.log(num6)// '31250000' 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值