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 相关文章推荐
Sample script that displays all of the users in a given SQL Server DB
Jun 16 Javascript
js截取中英文字符串、标点符号无乱码示例解读
Apr 17 Javascript
轻量级的原生js日历插件calendar.js使用指南
Apr 28 Javascript
node.js+express制作网页计算器
Jan 17 Javascript
AngularJS中处理多个promise的方式
Feb 02 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
Dec 08 Javascript
vue 中自定义指令改变data中的值
Jun 02 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
Node解决简单重复问题系列之Excel内容的获取
Jan 02 Javascript
javascript少儿编程关于返回值的函数内容
May 27 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
Node.js Event Loop各阶段讲解
Mar 08 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
Smarty模板快速入门
2007/01/04 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
js 作用域和变量详解
2017/02/16 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
浅谈Vue中render中的h箭头函数
2019/11/07 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
vue实现验证用户名是否可用
2021/01/20 Vue.js
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
梅尔倒谱系数(MFCC)实现
2019/06/19 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Spark处理数据排序问题如何避免OOM
2020/05/21 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
学生自我评价范文
2014/02/02 职场文书
政府信息公开实施方案
2014/05/09 职场文书
企业党员个人自我评价
2014/09/20 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
在vue中import()语法不能传入变量的问题及解决
2022/04/01 Vue.js