计算机程序的运行需要对值进行操作,在编程语言中值的类型被称作数据类型,编程语言最基本的特性就是能够支持多种数据类型。当程序需要将值保存起来以备将来使用时,便将其赋值给一个变量。变量是一个值的符号名称,可以通过该名称来获得对值的引用。
JavaScript中除了数字、字符串、布尔值、null和undefined之外就是对象了,对象是属性的集合,每个属性都由“键:值”构成。

1、数字

和其它编程语言不同,JavaScript不区分整数值和浮点数值。JavaScript中的所有数字均用浮点数值表示。JavaScript采用IEEE754标准定义的64位浮点格式表示数字,这意味着它能表示的最大值是±1.7976931348623157x10的308次幂,最小值是±5x10的-324次幂。

整数能表示的范围是-9007199254740992-9007199254740992(-2的53次幂到2的53次幂),包含边界值,如果使用了超过此范围的整数,则无法保证低位数的精度。但需要注意的是数组的索引是基于32位的整数。

当一个数字直接出现在JavaScript程序中,称之为数字直接量,JavaScript支持多种格式的数字直接量,注意在任何数字直接量前添加符号(-)可以得到他们的负值。但负号是一元求反运算符,并不是数字直接量语法的组成部分。

1.1整形直接量
除了十进制的整形直接量,JavaScript还可以识别十六进制的值,十六进制直接量是以“0x”或“0X”为前缀,其后跟随十六进制数串的直接量。十六进制值是0-9之间的数字和a(A)-f(F)之间的字母构成。尽管ECMAScript标准不支持八进制直接量,但JavaScript的某些实现可以允许采用八进制形式表示整数。八进制直接量以数字0开始,其后跟随一个由0-7之间的数字组成。由于某些JavaScript的实现支持八进制直接量,而有些不支持,因此最好不要使用以0为前缀的整形直接量,毕竟我们也无法得知当前JavaScript的实现是否支持八进制的解析。在ECMAScript6的严格模式下,八进制直接量是明令禁止的。

1.2浮点型直接量
浮点型可以含有小数点,它们采用的是传统的实数写法。一个实数由整数部分,小数点和小数部分组成。
此外还可以使用科学计数法表示浮点型,即在实数后跟字母e(E)后面跟正负号,最后在加上整形的指数。语法如下:
[digits][.digits][(e|E)[(+|-)]digits]
3.14
1.234E5 表示1.234x10的5次幂
1.234E-5 表示1.234x10的-5次幂

1.3JavaScript中算术运算符
JavaScript程序是使用语言本身提供的算术运算符来进行数字运算的,这些运算符包括+、-、*、/、%。除了基本的运算符外,
JavaScript还支持更加复杂的算术运算符,这些复杂运算作为Math对象的属性定义的函数和常量来实现。

方法 描述
abs(x) 返回 x 的绝对值。Math.abs(-3.2)=3.2
acos(x) 返回 x 的反余弦值。
asin(x) 返回 x 的反正弦值。
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x) 对数进行上舍入。
cos(x) 返回数的余弦。
exp(x) 返回 Ex 的指数。
floor(x) 对 x 进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y,z,...,n) 返回 x,y,z,...,n 中的最高值。
min(x,y,z,...,n) 返回 x,y,z,...,n中的最低值。
pow(x,y) 返回 x 的 y 次幂。Math.pow(2,5) =2的5次幂=32
random() 返回 0 ~ 1 之间的随机数。
round(x) 四舍五入。Math.round(4.83)=5
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。

JavaScript中的算术运算在溢出(overflow),下溢(underflow)或被零整除时不会报错。当数字运算结果超过了JavaScript所能表示的数字上限(溢出),结果为一个特殊的无穷大值Infinity。同样的当负数的值超过了JavaScript所能表示的负数范围,结果为负无穷大-Infinity表示。无穷大值的行为特性和我们所期望的是一致的,基于它们的加减乘除结果是无穷大值。

下溢是当运算结果无限接近于0并比JavaScript能表示的最小值还小的时候发生的一种情形。这种情况下JavaScript将会返回0.当一个负数发生下溢时,JavaScript返回一个特殊的值负零,这个值(负零)几乎和正常的零完全一样。几乎很少用到负零。

被零整除在JavaScript并不报错,它只是简单的返回无穷大或负无穷大。但有一个例外,零除以零没有意义,这种整除运算结果也是一个非数字(not-a-number NaN)值,用NaN表示。无穷大除以无穷大,给任意负数做开方运算或者算术运算符与不是数字或无法转换为数字的操作数一起使用时都返回NaN
非数字值NaN和任何值都不相等,包括自身。也就是说没办法通过a==NaN来判断a的值是否是NaN,可以使用isNaN(变量)来判断是否是NaN,如果结果为true表示是NaN类型。

isFinite(变量)在参数不是NaN、Infinity或-Infinity的时候返回true。
负零同样有特殊,它和正零是相等的(即使使用JavaScript的严格相等测试来判断)。这意味着两个值几乎一样,除了作为除数之外:

var z = 0;

var n = -0;

z === n;   // 结果为true

a = 2 / z;  // 结果为Infinity

c = 2 / n;  //  结果为-Infinity

1.4二进制浮点数和四舍五入错误
实数由无数个,但JavaScript通过浮点数的形式只能表示其中有限的个数(确切的说是18437736874454810627个,本人未测试)。也就是说,当在JavaScript中使用实数的时候,常常只是真实值的一个近似表示。

JavaScript采用了IEEE-754浮点数表示法(几乎所有现代编程语言所采用),这是一种二进制表示法,可以精确的表示分数,如1/2、1/8、1/1024。遗憾的是,我们常用的分数(特别是在金融计算方面)都是十进制分数1/10、1/100等。二进制浮点数表示法并不能精确表示类似0.1这样简单的数字。JavaScript具有足够的精度,可以及其近似于0.1.但事实是,数字不能精确表述的确带来一些问题。如下代码:

var a = 0.3 - 0.2  // a实际等于0.09999999999999998
var b = 0.2 - 0.1 // b实际等于0.1

由于舍入误差,0.3和0.2之间的近似差值实际上并不等于0.2和0.1之间的近似差值。这个问题并不只在JavaScript中才会出现,在任何使用二进制浮点数的编程语言中都会有这个问题。需要理解的是上述代码a和b的值非常的接近彼此最终的正确值,这种结果可以胜任大多数的计算任务,这个问题也只有在比较两个值是否相等的时候才会出现。

2、Data对象

JavaScript语言核心包括Date()构造函数,用来创建表示日期和时间的对象。这些日期对象的方法为日期计算提供了简单的API。日期对象不像数字那样是基本数据类型。下面是常用方法:

方法 描述
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getFullYear() 从 Date 对象以四位数字返回年份。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。
getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。
getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。
getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。
getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。
getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。
getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。
getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。
getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。
getYear() 已废弃。 请使用 getFullYear() 方法代替。
parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。
setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。
setFullYear() 设置 Date 对象中的年份(四位数字)。
setHours() 设置 Date 对象中的小时 (0 ~ 23)。
setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。
setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。
setMonth() 设置 Date 对象中月份 (0 ~ 11)。
setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。
setTime() setTime() 方法以毫秒设置 Date 对象。
setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。
setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。
setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。
setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。
setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。
setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。
setUTCSeconds() setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。
setYear() 已废弃。请使用 setFullYear() 方法代替。
toDateString() 把 Date 对象的日期部分转换为字符串。
toGMTString() 已废弃。请使用 toUTCString() 方法代替。
toISOString() 使用 ISO 标准返回字符串的日期格式。
toJSON() 以 JSON 数据格式返回日期字符串。
toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。
toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。
toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。
toString() 把 Date 对象转换为字符串。
toTimeString() 把 Date 对象的时间部分转换为字符串。
toUTCString() 根据世界时,把 Date 对象转换为字符串。
UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。
valueOf() 返回 Date 对象的原始值。

 3、字符串

字符串是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。JavaScript通过字符串类型来表示文本。字符串的长度是其所含16位值的个数。JavaScript字符串的索引从0开始。第一个字符的位置使0,第二个位置使1,以此类推。JavaScript中的字符串由单引号或双引号括起来。单引号定界的字符串中可以包含双引号,由双引号定界的字符串中也可以包含单引号。

在ECMAScript3中,字符串必须写在一行中,而在EXMAScript5中,字符串可以拆分成数行,每行必须以反斜线(\)结束,反斜线和行结束符都不算是字符串的内容。可使用“\n”进行换行。

 var a = "Hello \
world\
haha"

字符串常用方法:

方法 描述
charAt() 返回指定索引位置的字符
charCodeAt() 返回指定索引位置字符的 Unicode 值
concat() 连接两个或多个字符串,返回连接后的字符串
fromCharCode() 将 Unicode 转换为字符串
indexOf() 返回字符串中检索指定字符第一次出现的位置
lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置
localeCompare() 用本地特定的顺序来比较两个字符串
match() 找到一个或多个正则表达式的匹配
replace() 替换与正则表达式匹配的子串
search() 检索与正则表达式相匹配的值
slice() 提取字符串的片断,并在新的字符串中返回被提取的部分
split() 把字符串分割为子字符串数组
substr() 从起始索引号提取字符串中指定数目的字符
substring() 提取字符串中两个指定的索引号之间的字符
toLocaleLowerCase() 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLocaleUpperCase() 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLowerCase() 把字符串转换为小写
toString() 返回字符串对象值
toUpperCase() 把字符串转换为大写
trim() 移除字符串首尾空白
valueOf() 返回某个字符串对象的原始值

4、转义符

反斜线(\)有着特殊的用途,反斜线后加一个字符就不再表示字符本身了,而代表其它意义。下面是常见的转义字符。

义字符
意义
ASCII码值(十进制)
\a
响铃(BEL)
007
\b
退格(BS) ,将当前位置移到前一列
008
\f
换页(FF),将当前位置移到下页开头
012
\n
换行(LF) ,将当前位置移到下一行开头
010
\r
回车(CR) ,将当前位置移到本行开头
013
\t
水平制表(HT) (跳到下一个TAB位置)
009
\v
垂直制表(VT)
011
\\
代表一个反斜线字符''\'
092
\'
代表一个单引号(撇号)字符
039
\"
代表一个双引号字符
034
\? 代表一个问号 063
\0
空字符(NUL)
000
\ddd
1到3位八进制数所代表的任意字符
三位八进制
\xhh
1到2位十六进制所代表的任意字符
十六进制

学习园地:

一个整数(范围1-100000),它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

JavaScript(二)数据类型(一)的更多相关文章

  1. JavaScript 的数据类型 相关知识点

    (1)基本数据类型介绍 JavaScript的数据类型分为两类:原始类型(primitive type)和对象类型(object type) 或者说是:可以拥有方法的类型和不能拥有方法的类型 或者说是 ...

  2. JavaScript判断数据类型总结

    最近做项目中遇到了一些关于javascript数据类型的判断处理,上网找了一下资料,并且亲自验证了各种数据类型的判断网页特效,在此做一个总结吧! 一.JS中的数据类型  1.数值型(Number):包 ...

  3. 从头开始学JavaScript (三)——数据类型

    原文:从头开始学JavaScript (三)--数据类型 一.分类 基本数据类型:undefined.null.string.Boolean.number 复杂数据类型:object object的属 ...

  4. JavaScript基本数据类型

    JavaScript基本数据类型 在JavaScript种一共有6种数据类型:Null.Undefined.Boolean.String.Number.Object.其中Object是一种复杂数据类型 ...

  5. javaScript(4)---数据类型

    javaScript(4)---数据类型 第4章 数据类型 学习要点: 1.typeof操作符 2.Undefined类型 3.Null类型 4.Boolean类型 5.Number类型 6.Stri ...

  6. JavaScript:数据类型

    JavaScript中数据类型分为两种: 1.基本数据类型 string number boolean null undefined 2.引用类型 数组.Object.function 一.基本数据类 ...

  7. javascript 判断数据类型的几种方法

    javascript 判断数据类型的几种方法一.typeof 直接返回数据类型字段,但是无法判断数组.null.对象 typeof 1 "number" typeof NaN &q ...

  8. 初识JavaScript(二)

    初识JavaScript(二) 我从上一篇<初识JavaScript(一)>知道和认识JavaScript的词法结构,也开始慢慢接触到了JavaScript的使用方法,是必须按照JavaS ...

  9. JS-安全检测JavaScript基本数据类型和内置对象的方法

    前言:在前端开发中经常会需要用到检测变量数据类型的需求,比如:判断一个变量是否为undefined或者null来进行下一步的操作,今天在阅读“编写高质量代码-改善JavaScript程序的188个建议 ...

  10. JavaScript基础——数据类型

    JavaScript使用数据类型来确定如何处理被分配给一个变量的数据.变量的类型决定了你可以对变量进行什么操作,如循环或者执行.下面描述了最常用的变量类型. 字符串(String):此数据类型将字符数 ...

随机推荐

  1. Mysql的两种“排名第几且有可能为空的记录”写法(力扣176)

    编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) . +----+--------+ | Id | Salary | +----+--------+ | 1 | 100 ...

  2. RabbitMQ面试题

    1.为什么要引入MQ系统,直接读写数据库不行吗?其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么? 面试官问你这个问题,期望的一个回答是说,你们公 ...

  3. Socket网络编程知识点

    静态方法    与类无关,不能访问类里的任何属性和方法类方法    只能访问类变量属性@property    把一个方法变成一个静态属性,    flight.status    @status.s ...

  4. .NET Core中的路由约束

    背景介绍 上周给大家分享了Nancy in .NET Core学习笔记 - 路由之后, 就一直在考虑.NET Core能否实现和Nancy中一样的路由约束, 最近查阅了一下MSDN及一些国外博客, 发 ...

  5. RabbitMQ学习笔记(三) 发布与订阅

    发布与订阅 在我们使用手机发送消息的时候,即可以选择给单个手机号码发送消息,也可以选择多个手机号码,群发消息. 前面学习工作队列的时候,我们使用的场景是一个消息只能被一个消费者程序实例接收并处理,但是 ...

  6. redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换

    一.  概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...

  7. Linux~连接windows的ftp,unzip出现的问题

    在linux进行连接windows下的ftp服务器 ftp://192.168.2.71 输入用户名和密码登陆成功

  8. 想在Java中实现Excel和Csv的导出吗?看这就对了

    前言 最近在项目中遇到一个需求,需要后端提供一个下载Csv和Excel表格的接口.这个接口接收前端的查询参数,针对这些参数对数据库做查询操作.将查询到的结果生成Excel和Csv文件,再以字节流的形式 ...

  9. Chapter 5 Blood Type——11

    "I just wondered… if you could warn me beforehand the next time you decide to ignore me for my ...

  10. API网关模式

    什么是网关 网关一词来源于计算机网络中的定义,网关(Gateway)又称网间连接器.协议转换器.网关的准确定义是: 两个计算机程序或系统之间的连接,网关作为两个程序之间的门户,允许它们通过不同计算机之 ...