计算机程序的运行需要对值进行操作,在编程语言中值的类型被称作数据类型,编程语言最基本的特性就是能够支持多种数据类型。当程序需要将值保存起来以备将来使用时,便将其赋值给一个变量。变量是一个值的符号名称,可以通过该名称来获得对值的引用。
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. linux入门--Linux发行版本详解

    从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核.内核指的是一个提供设备驱动.文件系统.进程管理.网络通信等功能的系统软件,内核并不是一套完整的操作系统,它只是操作系统的核心.一些组织或厂 ...

  2. Netty:ChannelInitializer

    1. 作用 用于在某个Channel注册到EventLoop后,对这个Channel执行一些初始化操作.ChannelInitializer虽然会在一开始会被注册到Channel相关的pipeline ...

  3. This relative module was not found:

    晚上项目敲完,关机睡觉!  早上醒来-----打开项目,惊呆了 !This relative module was not found: 如图   这个报错,我当时怎么也没看懂!!!   后来经过测试 ...

  4. 低延时的P2P HLS直播技术实践

    本文根据4月21日OSC源创会·武汉站的现场分享为蓝本,重新整理.以下是演讲内容: 近几年,随着直播.短视频等视频领域对带宽要求的提升以及CDN行业竞争的加剧,很多CDN公司开始往P2P-CDN方向发 ...

  5. java代码之美(10)---Java8 Map中的computeIfAbsent方法

    Map中的computeIfAbsent方法 Map接口的实现类如HashMap,ConcurrentHashMap,HashTable等继承了此方法,通过此方法可以在特定需求下,让你的代码更加简洁. ...

  6. asp.net core系列 41 Web 应用 MVC视图

    一.MVC视图 在Web开发的MVC和Razor中,都有使用视图,在Razor中称为"页"..cshtml视图是嵌入了Razor标记的HTML模板. Razor 标记使用C#代码, ...

  7. 系列文章|OKR与敏捷(一):瀑布式目标与敏捷的冲突

    OKR与敏捷开发的原理有着相似之处,但已经使用敏捷的团队再用OKR感觉会显得多余.这种误解的根源就在于对这两种模式不够了解,运用得当的情况下,OKR和敏捷可以形成强强联合的效果,他们可以创造出以价值为 ...

  8. leetcode — maximum-depth-of-binary-tree

    /** * * Source : https://oj.leetcode.com/problems/maximum-depth-of-binary-tree/ * * * * Given a bina ...

  9. leetcode — gray-code

    import org.lep.leetcode.groupanagrams.GroupAnagram; import java.util.ArrayList; import java.util.Arr ...

  10. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-> “Tab”标签新增可“最大化”显示功能

    最大化工作区的功能是非常必要的,特别是当模块功能比较多时,把工作区最大的展现出来就变得很重要,RDIFramework.NET V3.2版本对工作区新增了最大功能,最大化工作区后如下图所示:  具体使 ...