JavaScript的类型、值和变量小结


Posted in Javascript onJuly 09, 2015

前言:JavaScript的数据类型分为两类:原始类型和对象类型。5种原始类型:数字、字符串、布尔值、null(空)、undefined(未定义)。对象是属性的集合,每个属性都由“名/值对”(值可以是原始值、也可以是对象)构成。三个比较特殊的对象:全局对象、数组、函数。JavaScript语言核心还定义了三种有用的类:日期(Date)类、正则(RegExp)类、错误(Error)类。

1 数字

JavaScript中不区分整数值和浮点数值。JavaScript可以识别十进制整型直接量(所谓直接量,就是程序中直接使用的数据值),和16进制值(以0x或0X为前缀,那个是数字0不是字母o。想想如果是字母o的话,那一个十六进制值不成了一个标识符了嘛)。尽管ECMAScript标准不支持八进制直接量,但JavaScript的某些实现可以采用八进制形式表示整数(以数字0为前缀),笔者在自己电脑上的IE、Chrome、FF这三种浏览器中使用八进制给一个变量赋值也都没问题。不过在ECMAScript6的严格模式下,八进制直接量是明令禁止的。

浮点型直接量有两种写法。①传统的实数写法:有整数部分、小数点和小数部分组成;②指数计数法:即在实数后跟字母e或E,后面跟正负号,其后再跟一个整型的指数。

 1.1 算术运算的溢出

JavaScript中算术运算在溢出(overflow)、下溢(underflow)或被0整除时不会报错。

溢出:当运算结果超出了JavaScript所能表示的数字上限,结果为正无穷大Infinity或负无穷大-Infinity。无穷大值得行为特性也符合现实:基于它们的加、减、乘和除运算结果还是无穷大值(当然保留它们的正负号);下溢:当运算结果无限接近于零并比JavaScript能表示的最小值还小的时候发生的情形。这种情况下,将会返回0。当一个负数发生下溢时返回特殊值“负零”。负零和整零基本是相等的(甚至可以使用严格相等===来测试),除了作为除数之外:

var zero = 0;  //正零值
var negz = -0;  //负零值
zero === negz  //表达式返回值为true
1/zero === 1/negz  
//表达式返回值false,等价于判断正无穷大和负无穷大是否严格相等

被0整除会返回正无穷大或者负无穷大值。但0除以0会返回NaN(JavaScript预定义对象Number的NaN属性的值)。返回NaN的有四种情况:①0除以0②无穷大除以无穷大③给任意负数作开方运算④算术运算符与不是数字或无法转换为数字的操作数一起使用时。

NaN值有一点特殊:它和任何值都不相等,包括自身。判断一个变量x是否为NaN的两种方法:①使用函数isNaN()②是使用x != x 判断,当且仅当x为NaN时,表达式结果才为true。JavaScript中还有一个类似的函数isFinite(),在参数不是NaN、Infinity或-Infinity的时候返回true。

1.2 二进制浮点数和四舍五入错误

实数有无数个,但JavaScript通过浮点数的形式只能表示其中有限个数。也就是说,在JavaScript中使用实数的时候,常常只是一个真实值的一个近似表示。JavaScript采用了IEEE-754浮点数表示法,这是一种二进制表示法,可以精确的表示如1/2、1/8和1/1024、这样的分数,但是十进制分数1/10、1/10等并不能精确的表示。例如:

var x = 0.3 -0.2;  //x=0.09999999999999998
var y = 0.2 - 0.1;  // y=0.1
x == y       //false
x == 0.1      //false
y == 0.1      //true
0.1 == 0.1     //true
var z = x + y;   //z=0.19999999999999998

2 文本

2.1 字符串、字符集

字符串(string)是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。字符串的长度(length)是其所含16位值得个数。JavaScript通过字符串类型来表示文本。注意:JavaScript中并没有表示单个字符的“字符型”。要表示一个16位值,只需将其赋值给字符串变量即可。

JavaScript采用UTF-16编码的Unicode字符集,JavaScript字符串是由一组无符号的16位值组成的序列。那些不能表示为16位的Unicode字符则遵循UTF-16编码规则——用两个16位值组成一个序列(或称作“代理项对”)表示。这意味着一个长度为2的JavaScript字符串有可能表示一个Unicode字符。注意:JavaScript定义的各式字符串的操作方法均作用于16位值,而非字符,且不会对代理项对做单独处理。书看到这里,又结合http://www.alloyteam.com/2013/12/js-calculate-the-number-of-bytes-occupied-by-a-string/上面所述,终于对Unicode字符集、UTF-8、UTF-16稍有理解。

字符串的定界符可以是单引号或者双引号。这两种形式的定界符可以嵌套,但是不能多层嵌套(比如,双引号可以包含单引号,这时单引号中不能再包含双引号了)。正如上篇所说,一个字符串值可以拆分为数行,每行必须以反斜线(\)结束,这时反斜线和行结束符都不算是字符串内容,即字符串本身并非是多行,只是写成了多行的形式。

注意:①在JavaScript中字符串是固定不变的(除非重新赋值),类似replace()和toUpperCase()的方法都返回新字符串,原字符串本身并没有变化;②字符串可以当做只读数组,除了使用charAt()方法来查询一个单一字符,也可以使用方括号的方式来访问字符串中的单个字符(16位值),例如:

s = "hello, world";


s[0] 
//=>"h"

2.2 转义字符

转义字符 含义 
\o NUL字符(\u0000)
\b 退格符(\u0008)
\t 水平制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车符(\u000D)
\" 双引号(\u0022)
\' 撇号或单引号(\u0027)
\\ 反斜线(\u005C)
\xXX 由两位十六进制数XX指定的Latin-1字符
\uXXXX 由4位十六进制数XXXX指定的Unicode字符
                                                                                                                                                                                                                                                                                                                               
注意:如果"\"字符位于没有在表中列出的字符前,则忽略"\"。比如,"\#"和"#"等价。别忘了反斜线还有一个作用就是多行字符串中每行结束处使用反斜线。   

3 布尔值

在JavaScript中的值都可以转换为布尔值。其中,null、undefined、0、-0、NaN、""(空字符串),这6个值会被转换成false,false和这六个值有时称做“假值”;其他所有值,包括对象(数组)都会转换成true,true和这些值相应的被称做“真值”。注意:布尔值包含toString()方法,因此可以使用这个方法将字符串转换成“true”或“false”,但它并不包含其他有用的方法。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
基于逻辑运算的简单权限系统(实现) JS 版
Mar 24 Javascript
Javascript中的Array数组对象详谈
Mar 03 Javascript
使用js操作css实现js改变背景图片示例
Mar 10 Javascript
使用jquery.upload.js实现异步上传示例代码
Jul 29 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
Aug 18 Javascript
基于angular实现三级联动的生日插件
May 12 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
vue 下列表侧滑操作实例代码详解
Jul 24 Javascript
详解关于element el-button使用$attrs的一个注意要点
Nov 09 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
node中实现删除目录的几种方法
Jun 24 Javascript
js针对图片加载失败的处理方法分析
Aug 24 Javascript
JS实现文档加载完成后执行代码
Jul 09 #Javascript
jQuery检测某个元素是否存在代码分享
Jul 09 #Javascript
jquery.map()方法的使用详解
Jul 09 #Javascript
jQuery实现鼠标点击弹出渐变层的方法
Jul 09 #Javascript
javascript+ajax实现产品页面加载信息
Jul 09 #Javascript
浅谈JavaScript中null和undefined
Jul 09 #Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
Jul 09 #Javascript
You might like
PHP数组操作汇总 php数组的使用技巧
2011/07/17 PHP
php列出一个目录下的所有文件的代码
2012/10/09 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jQuery实现div浮动层跟随页面滚动效果
2014/02/11 Javascript
Javascript保存网页为图片借助于html2canvas库实现
2014/09/05 Javascript
详解JS函数重载
2014/12/04 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Python对象体系深入分析
2014/10/28 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python urls.py的三种配置写法实例详解
2017/04/28 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
python简单验证码识别的实现方法
2019/05/10 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Python3的socket使用方法详解
2020/02/18 Python
python调用摄像头的示例代码
2020/09/28 Python
Python实现疫情地图可视化
2021/02/05 Python
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
中软Java笔试题
2012/11/11 面试题
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
2016/03/27 面试题
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
中学生纪念九一八事变演讲稿
2014/09/14 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS