基本数据类型

大家好,我是IT修真院萌新分院的王寒,一枚正直,纯洁,善良的前端程序员。

今天给大家分享一下基本数据类型。

1.背景介绍

JavaScript是一种弱类型或者说动态语言。就是不用提前声明变量的类型, 在程序运行过程中,类型会被自动确定。这也意味着你可以使用同一个变量保存不同类型的数据

2.知识剖析

js基本数据类型有哪些?

ECMAScript中有5中简单数据类型(也称为基本数据类型): Undefined、Null、Boolean、Number和String。 还有1中复杂的数据类型————Object,Object本质上是由一组无序的名值对组成的。

typeof 操作符

由于js中的变量是松散类型的,所以它提供了一种检测当前变量的数据类型的方法,就是typeof关键字. 通过typeof关键字,对这5种数据类型会返回下面的值(以字符串形式显示)

undefined ---------- 如果值未定义 Undefined

boolean ---------- 如果这个值是布尔值 Boolean

string ---------- 如果这个值是字符串 String

number ---------- 如果这个值是数值类型 Number

object ---------- 如果这个值是对象或null Object

需要注意的是typeof null返回为object,因为特殊值null被认为是一个空的对象引用。

1. Undefined

Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined

var a;

alert(a==undefined);//true

这个例子只声明了变量a,但并没有对它进行初始化。比较这个变量与undefined字面量,表明它们是相等的

var a=undefined;

alert(a==undefined);//true

这个例子使用undefined值显示初始化了变量a,但是没有必要这么做,因为未经初始化的值默认就会取得undefined值

不过包含undefined值的变量与未定义的变量还是不一样的

var a=;//这个变量声明之后默认取得了undefined值

//下面这个变量并没有声明

//var age

alert(a);  //"undefined"

alert(age);  //产生错误

第一个警告框会显示a的值,即"undefined";第二个警告框因为传递alert()函数的是没有声明的变量age所以会出现一个错误

对没有初始化的变量执行typeof操作符会返回undefined值,而对没有声明的变量执行typeof操作符也会返回undefined值

var a=;//这个变量声明之后默认取得了undefined值

//下面这个变量并没有声明

//var age

alert(typeof a);  //"undefined"

alert(typeof age);  //"undefined"

2.null

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针, 而这也正是使用typeof操作符检测null时会返回object的原因。

var car=null;

alert(typeof car);  //"object"

如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值。这样一来, 只要直接检测null值就可以知道相应的变量是否已经保存了一个对象的引用了。

if (car !=null){

//对car对象执行某些操作

}

实际上undefined值是派生自null值的,因此ECMA-262规定对它们的相等性测试要返回true

alert(null==undefined);//true

位于null和undefined之间的相等操作符"=="总是返回true,不过需要注意的是这个操作符醋鱼比较的目的会转换其操作数

只要意在保存对象的变量还没有真正保存对象,就应该明确的让该变量保存null值。不仅可以体现null作为空对象指针的惯例还有助于进一步区分null和undefined

3.Boolean

该类型只有两个字面值:true和false。这两个值与数字值不是一回事,因此true不一定等于1,而false也不一定等于0。

var found=true;

var lost=false;

需要注意的是Boolean类型的字面值true和false是区分大小写的

虽然Boolean类型的字面值只有两个,但JavaScript中所有类型的值都有与这两个Boolean值等价的值。 要将一个值转换为其对应的Boolean值,可以调用类型转换函数Boolean(),

var message="Hello world";

var messageAsBoolean=Boolean(message);

在这个例子中,字符串message被转换成了一个Boolean值,该值被保存在messageAsBoolean变量中。 可以对任何数据类型的值调用Boolean()函数,而且总会返回一个Boolean值。至于返回的这个值是true还是false, 取决于要转换值的数据类型及其实际值

数据类型转换为true的值转换为false的值

Booleantruefalse

String任何非空字符串..(空字符串)

Number任何非零数字值(包括无穷大)0和NaN

Object任何对象null

Undefined不适用undefined

这些转换规则对理解流控制语句(如if语句)自动执行相应的Boolean转换非常重要

var message="Hello world";

if (message){

alert("Value is true");

}

运行这个示例,就会显示一个警告框,因为字符串message被自动转换成了对应的Boolean值(true)。 由于存在这种自动执行的Boolean转换,因此确切地知道在流控制语句中使用的是什么变量至关重要

4.Number

这种类型用来表示整数和浮点数值,还有一种特殊的数值,即NaN(非数值 Not a Number)。 这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。 例如,在其他编程语言中,任何数值除以0都会导致错误,从而停止代码执行。但在JavaScript中, 任何数值除以0会返回NaN,因此不会影响其他代码的执行。

NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN, 这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。

alert(NaN == NaN);    //false

5.String

String类型用于表示由零或多个16位Unicode字符组成的字符序列, 即字符串。字符串可以由单引号(')或双引号(")表示。

String类型的特殊性

string类型有些特殊,因为字符串具有可变的大小,所以显然它不能被直接存储在具有固定大小的变量中。 由于效率的原因,我们希望JS只复制对字符串的引用,而不是字符串的内容。但是另一方面, 字符串在许多方面都和基本类型的表现相似,而字符串是不可变的这一事实(即没法改变一个字符串值的内容), 因此可以将字符串看成行为与基本类型相似的不可变引用类型

Boolean、Number、String 这三个是Javascript中的基本包装类型,也就是这三个其实是一个构造函数, 他们是Function的实例,是引用类型,这里的String指的是String这个构造函数,因为Javascript是松散类型的。

var name = String("jwy");

alert(typeof name);//"object"

var author = "Tom";

alert(typeof name);//"string"

注意,typeof 变量 如果值是"string" 的话,也就是这个变量是字符串,在Javascript中,字符串是基本类型,而在C#或Java中, 字符串是引用类型,但是Javascript中的String是引用类型,因为它是Javascript中定义好的基本包装类型,在C#中, String跟string其实是一样的。

6.Object

ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过new操作符后跟要创建的对象类型的名称来创建。 而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象

var o=new Object();

在ECMAScript中Object类型是所有它的实例的基础, 也就是说Object类型所具有的任何属性和方法也同样存在于更具体的对象中

Object常用方法和属性

3.常见问题

问题一:如何判断数据类型

问题二:常用数据转换方法

4.解决方法

一:使用typeof操作符。typeof操作符的操作数可以是变量也可以是数值字面量。需要注意的是 调用typeof null会返回"object",因为null被认为是一个空的对象引用。

二:转数值:parseInt() 和 parseFloat()。

转字符串: .toString()

强制转换:访问数据内部内容,并将符合格式的内容进行转换

Boolean(value) - 把给定的值转换成 Boolean 型;

Number(value) - 把给定的值转换成数字(可以是整数或浮点数);

String(value) - 把给定的值转换成字符串;

5.扩展思考

6.参考文献

ECMAScript原始类型

ECMAScript引用类型

ECMAScript类型转换

Javascript的三个组成部分

7.更多讨论

数组类型属于哪种类型?

var a=[];

alert(typeof a) //Object

问题:

1.数据类型能不能相互转换

答:可以

2.什么是引用类型

答:引用类型就是对象

3.引用类型和基本类型的区别

答:请点击

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

推荐阅读更多精彩内容