数据类型

ECMAScript中有五种数据类型(也称为基本数据类型):Undefined、Null、Boolean、Number和String。还有一种复杂数据类型--Object,Object本职上是由一组无须的名值对组成的。

  • typeof操作符
    使用typeof操作符可能返回下列某个字符串:
    a. "undefined" ——如果之歌值未定义;
    b. "boolean" ——如果这个值是布尔值;
    c. "string" ——如果这个值是个字符串;
    d. "number" ——如果这个值是数值;
    e. "object" ——如果这个值时对象或null;
    f. "function" ——如果这个值时函数;
  • Undefined类型
    Undefined类型只有一个值,即特殊的undefined。在声明变量后并未对其进行初始化(即赋值)时,这个变量的值就是undefined。
  • Null类型
    Null类型也是一个只有一个值的数据类型,这个特殊的值时null。从逻辑角度讲,null值表示一个空对象指针,这也是使用typeof操作符会返回object的原因。
    如果定义的变量准备用来保存对象,那么最好将该变量初始化为null,这样一来,只要检查null值就可以知道相应的变量是否已经保存好了一个对象的引用。
if (car != null) {
  // 对car对象执行指定操作
}

实际上,undefined值时派生自null值的,所以它们的相等性测试要返回true。

console.log(null == undefined);  // true
  • Boolean类型
    Boolean类型是ECMAscript中使用的最多的一种类型。该类型只有两个字面值:true和false。
  • Number类型
    Number类型是ECMAScript中最令人关注的数据类型,这种类型使用IEEE754(一种浮点数表示标准)来表示整数和浮点数值(浮点数值在某些语言中也被称为双精度数值)。其支持几种不同的数值字面量格式。
    最基本的数值字面量格式是十进制整数
var number = 55;

整数还可以通过八进制或十六进制的字面量来表示。其中,八进制字面值的第一位必须是0,然后是八进制数字序列(0~7)。如果字面值中的数值超出了范围,那么前导0将被忽略,后面的数值将被当做十进制数值解析。

var number1 = 070; // 0*8^2+7*8^1+0*8^0=56;
var number2 = 079; //无效的八进制数值——解析为79;
var number3 = 08; //无效的八进制数值——解析为8;

八进制字面量在严格模式下是无效的,会导致支持该模式的JavaScript引擎抛出错误。
十六进制字面值的前两位必须是0x,后跟任何十六进制数字(09及AF)。其中字母A~F可以大写也可以小写。

var num1 = 0xA; //十六进制的10;
var num2 = 0x1f; //1*16^1+15*16^0=31;

再进行算术计算时,所有以八进制和十六进制表示的数值最终都会被转换成十进制数值。

  1. 浮点数值
    浮点数值就是指该数值中心必须包含一个小数点,并且小数点后必须至少有一个数字。
    由于保存浮点数值需要的内存空间是保存整数值的两倍,所以在一些情况下ECMAScript会将浮点数值转换为整数值。当小数点后没有跟任何数字,那么这个数值就可以当做整数值来保存,同样地,如果浮点数值本身表示的就是一个整数,那么该值也会被保存为整数值。
var num1 = 1.; //小数点后面没有数字——解析为1;
var num2 = 1.0; //整数——解析为1;

对于那些极大或极小的数值,可以用e表示法(即科学计数法)表示的浮点数值表示。用e表示法表示的数值等于e前面的数值乘以10的指数次幂。

var num = 3.125e7; //等于31250000;
  1. 数值范围
    由于内存的限制,ECMAScript并不能保存世界上所有的值。
    如果计算得到一个超出js数值范围的值,那么这个数值将自动转换为特殊的infinity(正无穷)值。如果是负数则转换为-infinity(负无穷).
    要想确定一个数值是否是有穷的,可以使用isFinite()函数
console.log(isFinite(Number.MAX_VALUE)); //true
  1. NaN
    NaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
    NaN有两个特点。首先,任何涉及NaN的操作都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。
alert(NaN == NaN); // false

针对NaN的两个特点,ECMAScript定义了isNaN()函数。这个函数接受一个参数,该参数可以是任何类型。在接收到一个参数后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值。而任何不能转换为数值的值都会导致这个函数返回true

alert(isNaN(NaN)); //true;
alert(isNaN(10)); //false;
alert(isNaN('10')); //false;
alert(isNaN('red)); //true
alert(isNaN(true)); //false
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容