ECMAScript中有五种简单数据类型(基本数据类型):Undefined,Null,Boolean,Number,String。

  • Undefined 类型

  Undefined类型只有一个值,即Undefined。使用 var 声明变量但没有对其初始化时,这个变量的值就是 undefined。

例如:

var message ;
alert(message == undefined);  //true

上面的代码只是声明了 message,没有对其初始化,所以 message 的值就是 undefined 。起始它与  var message = undefined ;  是等价的,但我们并没有必要这么做,因为未经初始化的值默认就是undefined 值。

  还有,包含 undefined 值的变量与尚未定义的变量是不一样的,

例如:

1 var message ;
2 alert(message);  //undefined
3 alert(age);      //报错
4
5 alert(typeof message); //undefined
6 alert(typeof age); //undefined

第二行代码显示 message 的值, 即 undefined 。第三行代码由于 alert() 函数是尚未声明的变量 age ,则会导致一个错误。对于未声明过的变量,只能执行一个操作,就是用 typeof 检测其数据类型,不过有意思的是,对未初始化的变量执行 typeof 操作符返回的是 undefined ,对为声明的变量执行 typeof 操作符返回的也是 undefined。虽然这两种变量从技术角度看有着本质的区别,但实际上对哪种变量也不可能执行真正的操作。

  • Null 类型

  Null 类型也是只有一个值的数据类型,即 null 。从逻辑上看,null 值表示空对象指针,而这正是使用 typeof 操作符检测 null 值会返回 object 的原因,

例如:

var car = null ;
alert(typeof null);  // object

如果定义的变量准备将来用于保存对象,那么最好把这个变量初始化为 null 。这样一来,只要直接检测 null 值就可以知道相应的变量是否已经保存了一个对象的应用。

例如:

if ( car != null ){// code ...
}

有趣的是   null == undefined  为 true,实际上,undefined 值是派生自 null 值的,因此 ECMA-262 规定他们的相等性测试要返回 true。

  • Boolean 类型

  该类型有两个字面值,即 true 和 false。 true 不一定等于 1 , 而 false 也不一定等于 0 。以下为变量赋值boolean类型值的例子:

var found = true ;
var lost = false ;

  想要将一个值转换成为其对应的 Boolean 值,可以调应转型函数 Boolean() ,

例如:

var message = "Hello world";
var messageAsBoolean = Boolean(message);

可以对任何数据类型的值调用 Boolean() 函数,而且总会返回一个 Boolean 值,返回 true 或者 false 取决于转换值的数据类型及其实际值。

  • Number 类型

  1.浮点数值

   浮点数值(在这里做个简单的介绍),就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字,小数点前面可以没有整数,但是不推荐这种写法。

浮点数例子:

var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1;   // 不推荐

因为浮点数值需要的内存空间是整数的两倍,所以ECMAScript 会将浮点数值转换成为整数值。如果小数点后面没有跟任何数字,那么这个数值就可以作为整数值来保存,如果浮点数值本身就是一个整数,(如:10.0),那么该值也会被转换成为整数。

例如:

var floatNum1 = 1.;   //小数点后面没有数字,解析为 1
var floatNum2 = 10.0;  // 整数  解析为10 

需要注意的是,浮点数值的最高精度是17位小数,但在进行计算时其精度远远不如整数。例如:0.1 + 0.2 的结果不是 0.3,而是 0.30000000000000004,这个小小的舍入误差可能会导致无法测试特定的浮点数值。

例如:

if( a + b == 0.3){    //不要做这样的测试alert('you got 0.3');
}

永远不要测试某个特定的浮点数值!

  2.数值范围

   由于内存的限制,ECMAScrip并不能保存世界上所有的数值,能够表示的最小数值保存在 Number.MIN_VALUE 中,在大多数的浏览器中,这个值是 5e-324;能够保存最大数值保存在Number.MAX_VALUE 中,在大多数浏览器中,这个值是 1.7976931348623157e+308,如果某次计算超出了JavaScript 数值的计算范围,那么这个数值将会自动转换成特殊的 Infinity 值,这个值是负数的话,则会被转换成 -Infinity ,如果是正值的话,则会被转换成 Infinity 。如果某次计算返回了 Infinity ,是不能进行下次计算的。

  3.NaN

    NaN,即非数值(Not a Number),这个数值用于表示一个本来要返回数值的操作数未返回数值的情况。在其他语言中任何数值除以非数值都会报错,停止代码运行,而在JavaScript中,任何数值除以非数值都会返回 NaN ,因此不会影响其他代码执行。

    NaN 本身有两个特点,1.任何涉及NaN的操作都会返回 NaN。2.NaN与任何值都不相等,包括 NaN, 所以  NaN == NaN //false ,针对NaN的这两个特点,ECMAScript定义了 isNaN() 函数,该函数接受一个参数,参数可以使任何类型,而函数会帮我们判断这个参数是否“”不是数值”,isNaN()函数在接受到一个值后,会尝试将这个值转换成为数值,某些不是数值的值会直接转换为数值。

例如:

alert( isNaN(NaN) );      //true
alert( isNaN(10) );       //false (10 是一个数值)
alert( isNaN("10") );     //false (被转换成数值)
alert( isNaN("hello") );  //true (不能被转换)
alert( isNaN(true) );     //false  (可以被转换成数值1)

  4.数值转换 

    有三个函数可以把非数值转换为数值:Number(),parseInt(),parseFloat()。第一个函数,即转型函数Number() 可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。这三个函数对于同样的输入会有返回不同的结果。

  Number() 函数的转换规则如下:

  1.如果是Boolean值,true 和 false 分别转换成 1 和 0

  2.如果是数字,只是简单地传入和返回

  3.如果是null值,返回 0

  4.如果是undefined,返回NaN

  5.如果是字符串,会有如下几种情况:

    5.1 如果字符串只包含数字,则将其转换为十进制数值,如果整数值前面带 0 ,则 0 会被忽略

    5.2 如果字符串中包含有效的浮点格式,如 “1.1”,则将其转换成对应的浮点数值

    5.3 如果字符串中包含有效的十六进制格式,同样会转为相同大小的十进制格式

    5.4 如果是空字符串,则将其转换为 0

    5.5 如果字符串中包含除上述以外的字符,则将其转换为 NaN

  由于Number() 函数在转换字符串时比较复杂切不够合理,因此在处理整数的时候更多的用 parseInt() 函数,parseInt() 函数在转换字符串时,更多的是看其是否符合数值模式,他会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字或者负号,parseInt() 函数就会返回NaN。

例如:

var num1 = parseInt("1234abcd");  //1234
var num2 = parseInt("");          //NaN
var num3 = parseInt("0xA");       //10 (十六进制)
var num4 = parseInt("22.5");      //22

  与 parseInt() 函数类似,parseFloat() 也是从第一个字符开始解析每个字符,一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止,也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。以下是使用parseFloat() 转换的例子:

var num1 = parseFloat("1234abcd");  //1234
var num2 = parseFloat("0xA");       //0
var num3 = parseFloat("22.5");      //22.5
var num4 = parseFloat("22.5.4");    //22.5

  • String 类型

  String 类型用于表示由零或多个16位Unicode字符组成的字符序列,简称就是 “字符串”,字符串可以由双引号(“”)或者单引号(‘’)表示, var nameA = "Jim"; var nameA = 'jack'; 这两种写法都是有效的。在ECMAScript中这两种语法形式没什么区别,单引号和双引号表示的字符串完全相同,不过以什么开头的就必须以什么作为结尾,否则会报语法错误。

  1.字符字面量

    String数据类型包含一些特殊的字符字面量,也叫转义序列(转义符),用于表示非打印字符,或具有其他用途的字符。

(图片来自百度百科 )

这些字符串字面量可以出现在字符串中的任意位置,而且也将被作为一个字符来解析。

例如: var text = "This is the letter sigma: \u03a3.";  这个例子中的 text 变量共有28个字符,但是6个字符长的转义序列表示为 1 个字符。

任何字符串的长度都可以通过访问其 length 属性取得,例如  alert(text.length); //输出28 。

  2.字符串的特点

  ECMAScript中的字符串时不可变的,字符串一旦创建,他们的值就不能改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充改变量。

例如:

var lang = "Java";
lang = lang + "Script";

"Java" 与 "Script" 都会被销毁,重新定义的结果为 "JavaScript"。

  3.转换为字符串

    要把一个值转换为字符串有两种方式,第一种是使用每个值都有的 toString()方法。

例如:

var age  = 11 ;
var ageAsString = age.toString();  //字符串"11"
var found = true ;
var foundAsString = found.toString();// 字符串 "true"

数值,布尔值,对象和字符串值都有toString()方法,但是null和undefined值没有这个放法。

  在不知道要转换的值是不是null或者undefined的时候,还可以用String() ,这个函数能够将任何类型的值转为字符串。

  String()函数遵循以下转换规则:

    1.如果值有toString() 方法,则调用该方法并返回相应的结果

    2.如果值为 null,则返回字符串 "null"

    3.如果值undefined,则返回字符串 "undefined"

例如:

var value1 = 10;
var value2 = true;
var value3 = null;
var value4 ;alert( String(value1) );  // "10"
alert( String(value2) );  //"true"
alert( String(value3) );  //"null"
alert( String(value4) );  //"undefined"

这里先后转换了四个值,数值和布尔值的转换结果与调用toString()方法得到的结果相同,因为 null 和 undefined 没有 toString() 方法,所以String()函数就返回了这两个值的字面量。

完。

本文参考JS高级程序设计第三章

转载于:https://www.cnblogs.com/bfc0517/p/7309484.html

JavaScript基本数据类型相关推荐

  1. JavaScript的数据类型有哪些?

    JavaScript的数据类型有哪些? 基本数据类型:字符串 String.数字 Number.布尔Boolean 复合数据类型:数组 Array.对象 Object 特殊数据类型:Null 空对象. ...

  2. javascript 六种数据类型

    javascript 六种数据类型 js的数据类型和常见隐式转化逻辑. 一.六种数据类型 原始类型(基本类型):按值访问,可以操作保存在变量中实际的值.原始类型汇总中null和undefined比较特 ...

  3. JavaScript 所有数据类型

    JavaScript 所有数据类型 在 JavaScript 中有 5 种不同的数据类型: string number boolean object function 3 种对象类型: Object ...

  4. 前端之 JavaScript 常用数据类型和操作

    JavaScript 常用数据类型有:数字.字符串.布尔.Null.Undefined.对象 JavaScript 拥有动态类型 JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型 ...

  5. 从数据类型 nvarchar 转换为 numeric 时出错_JS入门篇(三):javascript的数据类型详解...

    JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Undefined.Null.Boolean.Number.String. 复杂数据类型:Object. (1)U ...

  6. javascript基本数据类型与值类型引用类型说明

    DEMO: http://sources.ikeepstudying.com/jsdata/ 摘要:本文主要讲了javascript中的基本数据类型,以及值类型和引用类型的区别与使用 一.基本数据类型 ...

  7. JavaScript引用数据类型

    JavaScript引用数据类型 引用类型 在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起(它也常被称为类). Object类型 创建Object实例的方式有两种.第一种 ...

  8. 深度解析javaScript常见数据类型检查校验

    前言 在JavaScript中,数据类型分为两大类,一种是基础数据类型,另一种则是复杂数据类型,又叫引用数据类型 基础数据类型:数字Number 字符串String 布尔Boolean Null Un ...

  9. JavaScript 引用数据类型

    JavaScript 引用数据类型 对象(Object) 对象的创建 使用{}创建 使用Object创建 使用Function创建 使用class关键字 对象的原型模型 数组(Array) 数组的定义 ...

  10. 【核心基础知识】javascript的数据类型

    JavaScript 的数据类型可以分为 7 种:空(Null).未定义(Undefined).数字(Number).字符串(String).布尔值(Boolean).符号(Symbol).对象(Ob ...

最新文章

  1. zabbix系列~ 监控模式
  2. 用Spark实现简单的单词统计
  3. 详解sentinel:分布式系统的流量防卫兵
  4. CVPR 2017 《Object Detection in Videos with Tubelet Proposal Networks》论文笔记
  5. 用对拍程序来debug错误程序的错误数据
  6. [转]mysql优化——show processlist命令详解
  7. Linux内核原理与分析-第二周作业
  8. 催收评分卡(二)关于催收评分卡的血泪史
  9. matlab模式识别大作业_史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(二)...
  10. VLAN简介交换机VLAN配置
  11. pdf2cad v12
  12. 俄亥俄州立大学计算机硕士申请,俄亥俄州立大学计算机科学与工程理学硕士研究生申请要求及申请材料要求清单...
  13. 常用一些缺失dll文件下载网址,最新版本的 Microsoft Visual C++ 的下载链接
  14. Ansible-playbook 运维笔记
  15. k8s 使用HPA 进行弹性扩容pod节点,
  16. IDEA的maven的package打包
  17. bms中soh计算方式_电动汽车BMS中SOH和SOP估算策略总结
  18. 为啥VUE和React都选择hooks
  19. (转)blackrock的阿拉丁系统与风险管理
  20. 开发落网电台windows phone 8应用的计划(4)

热门文章

  1. HandBrake for Mac(专业的视频转码器) 最新版
  2. Wattagio for Mac(电池管理) 免激活版
  3. 苹果mac虚拟机软件:Parallels Desktop 17(pd虚拟机)Intel专用版
  4. 在 Mac App Store 上如何查看未完成的下载?
  5. 如何更改 macOS Monterey 和 iPadOS 15 中的 Safari 选项卡外观?
  6. iOS开发之Xcode开发快捷键大全
  7. Mac磁盘项目管理工具DiskCatalogMaker
  8. 系统升级时,数据库脚本执行注意事项,血的教训
  9. Springboot中如何在Utils类中使用@Autowired注入bean
  10. 用jquery实现图片轮播