ECMAScript中有5种基本数据类型,分别是:Undefined,Null,Boolean,Number和String,还有一种复杂数据类型Object,Object本质上是由一组无序的名值对组成的。(这里就不细细讲述了)

typeof操作符

typeof操作符是负责检测给定变量的数据类型,下面是几个使用typeof操作符的例子

这说明typeof操作符可以是变量,可以是数值字面量。注意,typeof是一个操作符而不是一个函数,因此例子中的圆括号尽管可以使用,但不是必须的。

调用typeof null会返回Object,因为特殊值null被认为是一个空的对象引用。

1、Undefined类型

Undefined类型 只有一个值,即特殊的undefined在使用var 声明但未对其加以初始化时,这个变量的值就是undefined(默认获得的)var message; 只是指针指向了undefined (已分配空间,但是没有赋值)。

var message;
alert(message==undefined);  //true

但是,包含undefined值的变量与尚未定义的变量还是不一样的。尚未定义的变量是空指针,没有在内存中分配任何空间所以报错

var message; //这个变量声明之后默认取得了undefined值
//var age;  //该变量未声明
alert(message);  //undefined
alert(age);  //报错

2、Null类型

Null类型是第二个只有一个值的数据类型,这个值就是null 。从逻辑角度看,null值便是一个空对象,所以在用typeof操作符检测时会返回object

var book=null;
alert(typeof book);  //object

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

3、Boolean类型

Boolean类型只有两个字面值:true和false,这两个值是区分大小写的,也就是说,True和False都不是Boolean值,只是标识符。
在ECMAScript中要将一个值转换为一个Boolean值,可以使用转型函数Boolean()

4、Number类型

最基本的数值字面量格式是十进制整数,十进制整数可以向下面那样直接在代码中输入

var intNum=55;

除了十进制表示外,还可以通过八进制和十六进制来表示。其中,八进制字面值得第一位必须是0,然后是八进制数字序列(0~7)。如果后接的字面值超出范围,则前面的导零失效,后面的值将被当做十进制数值解析。

var a=065;  //八进制的53
var b=085;   //85
var c=08;  //8
alert(a);
alert(b);
alert(c);

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

var a=0xA;
var b=0x1f;
console.log(a);//十六进制的10
console.log(b);//十六进制31

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

浮点数值

浮点数值就是指该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字。虽然小数点前面可以没有整数但不推荐。

var floatNum1=1.2;
var floatNum2=0.2;
var floatNum3=.2;
console.log(floatNum1);//1.2
console.log(floatNum2);//0.2
console.log(floatNum3);//0.2 虽然小数点前面可以没有整数但不推荐

由于保存浮点数值需要的内存空间是保存整数数值的两倍,所以ES会将浮点数值转换为整数值。如果小数点后面没有跟任何数字,会解析成整数保存。如果浮点数值本身表示的就是一个整数,那么该数值就会被转换为整数。

var floatNum4=1.;
var floatNum5=10.0;
console.log(floatNum4);//小数点后没有数字解析为整数1
console.log(floatNum5);//10

可以用e表示法(科学计数法)表示浮点数值。e表示法指表示的数值等于e前面的数值乘以10的指数次幂。前面的数可以是整数也可以是浮点数,中间是一个大写或小写的字母e,后面是10的指数幂。

var floatNum6=3.1456e7;
console.log(floatNum6);//31456000

NaN

NaN,即非数值(Not a Number)是一个特殊的值。在ES中,任何数值除以非数值会返回NaN。
首先,任何涉及NaN的操作(NaN/10)都会返回NaN。其次,NaN与任何值都不相等,包括NaN本身。

console.log(NaN==NaN); //false

针对NaN的特点,ES定义了isNaN()函数。这个函数接收一个参数,该参数可以是任何类型,函数会确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值(如字符串“10”或者Boolean值)。 任何不能被转换为数值的值都会导致这个函数返回true.

console.log(isNaN(NaN)); //true
console.log(isNaN(10));//false
console.log(isNaN("10"));//false
console.log(isNaN(""));//false
console.log(isNaN("febby"));//true
console.log(isNaN(true));//false

数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。第一个函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换为数值。

console.log(Number("Hello Febby")); //NaN
console.log(Number("")); //0
console.log(Number("000032"));//32 前导的零被忽略
console.log(Number(true));//1

parseInt()函数会忽略字符串前面的空格,直至找到第一个非空格字符。用parseInt()转换空字符串会返回NaN(Number()对空字符返回0)。

 console.log(parseInt("1234Febby"));//1234console.log(parseInt(""));//NaNconsole.log(parseInt("0xf"));//15 (十六进制)console.log(parseInt(32.6));//32  小数点不是有效的数字字符console.log(parseInt("075"));//75 (ES5认为是十进制)console.log(parseInt("70"));//70console.log(parseInt("0xa"));//10 (十六进制)

可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)。

console.log(parseInt("0xf",16));//15
console.log(parseInt("AF",16)); //175  如果指定了16作为第二个参数,字符串可以不带前面的"0x"
console.log(parseInt("AF"));//NaN

第二个参数表示按几进制进行解析成十进制的数

//第二个参数表示按几进制进行解析成十进制的数
console.log(parseInt("10",2));//2
console.log(parseInt("10",8));//8
console.log(parseInt("10",10));//10
console.log(parseInt("10",16));//16

parseFloat()与parseInt()类似,从第一个字符(位置0)开始解析每个字符,但是只解析十进制值,没有用第二个参数指定基数的用法

//parseFloat()只解析十进制值,没有用第二个参数指定基数的用法
console.log(parseFloat("1234Febby"));//1234
console.log(parseFloat("0xa")); //0  十六进制格式的字符串会被转换为0
console.log(parseFloat("071")); //71
console.log(parseFloat("22.5"));  //22.5
console.log(parseFloat("22.34.56")); //22.34
console.log(parseFloat("0958.2")); //958.2
console.log(parseFloat("3.145e7")); //31450000

5、String类型

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

console.log("Febby");
console.log('Febby');
console.log('Febby"); //报错

字符字面量(转义序列)

字面量 含义
\n 换行(next line)
\t 制表(table)
\b 退格(backspace)
\r 回车(return)
\f 进纸(feed paper)
\ \ 斜杠
\ ’ 单引号(’)
\ " 双引号(”)
\xnn 以十六进制代码nn表示的一个字符(其中n为0~F)。例如,\x41表示"A"
\unnn 以十六进制代码nnnn表示的一个字符(其中n为0~F)。例如,\u03a3表示"Σ"
var text="Hello Febby! \u03a3";
console.log(text); //Hello Febby! Σ
console.log(text.length);//14

字符串特点
ES中的字符串是不可变的。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,这个过程是在后台发生的。

 var lang="Hello";lang=lang+"Febby";console.log(lang);//HelloFebby

转换为字符串
要把一个值转换为字符串有两种方式。
第一种是 toString()方法。这个方法是返回相应的值的字符串表现。

 //转换为字符串var age=18;console.log(age.toString()); //字符串"18"

数值、布尔值、对象和字符串值都有toString()方法,但null和undefined值没有这个方法。

可以传递一个参数:输出数值的基数,可以输出以二进制、八进制、十六进制,或者其他进制格式表示的字符串值

 //可以传递一个参数:输出数值的基数,可以输出以二进制、八进制、十六进制,或者其他进制格式表示的字符串值var num=10;console.log(num.toString());//"10"console.log(num.toString(2));//"1010"console.log(num.toString(8));//"12"console.log(num.toString(10));//"10" console.log(num.toString(16));//"a"

第二种是 String()方法。这个函数能够将任何类型的值转为为字符串。因为null和undefined值没有toString()方法,所以String()函数就返回了这两个值的字面量。

console.log(String(10)); //"10"
console.log(String(true));//"true"
console.log(String(null));//"null"
console.log(String(""));//
console.log(String(undefined)); //"undefined"

6.Object类型

js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

三大引用类型

1.Object类型

我们看到的大多数类型值都是Object类型的实例,创建Object实例的方式有两种。

第一种是使用new操作符后跟Object构造函数,如下所示

var person = new Object();

person.name = "Micheal";

person.age = 24;

第二种方式是使用对象字面量表示法,如下所示

var person = {

  name : "Micheal",

  age : 24

};

2.Array类型

数组的每一项可以用来保存任何类型的数据,也就是说,可以用数组的第一个位置来保存字符串,第二个位置保存数值,第三个位置保存对象....另外,数组的大小是可以动态调整的。

创建数组的基本方式有两种

第一种是使用Array构造函数,如下所示

var colors = new Array("red","blue","yellow");

第二种是使用数组字面量表示法,如下所示

var colors = ["red","blue","yellow"];

3 Function类型

每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。函数通常是使用函数声明语法定义的,如下所示

function sum(num1,num2){

  return num1 + num2;

};

这和使用函数表达式定义函数的方式相差无几。

var sun = function (){

  return sum1 + sum2;

};

也就是说,js按照存储方式分为值类型和引用类型。那么他们的计算有什么区别呢?

题目1: var a = 100;

    var b = a;

      a = 200;

    console.log (b);

题目2: var a = {age : 20};

    var b = a;

    b.age = 21;

    console.log (a.age);

题目1的答案是 100,题目2的答案是21,

题目1是简单的值类型,在从一个变量向另一个变量赋值基本类型时,会在该变量上创建一个新值,然后再把该值复制到为新变量分配的位置上。

此时,a中保存的值为 100 ,当使用 a 来初始化 b 时,b 中保存的值也为100,但b中的100与a中的是完全独立的,该值只是a中的值的一个副本,此后,
这两个变量可以参加任何操作而相互不受影响。也就是说基本类型在赋值操作后,两个变量是相互不受影响的。

题目2是引用类型,当从一个变量向另一个变量赋值引用类型的值时,同样也会将存储在变量中的对象的值复制一份放到为新变量分配的空间中。

这时保存在变量中的是对象在堆内存中的地址,所以,与简单赋值不同,这个值的副本实际上是一个指针,而这个指针指向存储在堆内存的一个对象。那么赋值操作后,
两个变量都保存了同一个对象地址,则这两个变量指向了同一个对象。因此,改变其中任何一个变量,都会相互影响。

因此,引用类型的赋值其实是对象保存在栈区地址指针的赋值,因此两个变量指向同一个对象,任何的操作都会相互影响。

Javascript的5种基本数据类型总结相关推荐

  1. JavaScript的五种基本数据类型

    JS的五种基本数据类型有Undefined(未定义类型).Null(空引用数据类型). Boolean(布尔类型).Number(数字类型)和String( 字符串类型). Undefined 未定义 ...

  2. Javascript 5 种原始数据类型

    Javascript 中有 5 种始数据类型 Undefined Null: 值只有一个 null Boolean: 值有两个 true false (var a = false;) String N ...

  3. Javascript一(变量,数据类型,正则表达式,数据,语句)

    本文章适合具有一定程序编程语言基础的人士阅读,最好学完Java基础再来阅读本文章更容易理解语言初学者会看起来比较费劲,不易理解 一.导入脚本 在html导入Javascript的格式是: <sc ...

  4. python的6种基本数据类型--字典

    python的6种基本数据类型--字典 字典 字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1:value1,key2:value2} 1.键与值用冒号":&qu ...

  5. Javascript学习笔记一 之 数据类型

    在接触每一门编程语言之前,首先明白我们程序设计要处理的是"数据",而"数据"又用"数据类型"将其区分. 一.数据类型 Javascript是 ...

  6. javascript基础系列:javascript中的变量和数据类型(一)

    javascript基础系列:javascript中的变量和数据类型(一) 今天开始去重新系统温习一遍js基础,并作下记录 javascript是由三部分组成: ECMASCRIPT(ES): 描述了 ...

  7. JavaScript(一)—— 初识JavaScript/注释/输入输出语句/变量/数据类型

    本篇为 JavaScript 系列笔记第一篇,将陆续更新 文章目录 一.初识 JavaScript 1. JavaScript 是什么 2. JavaScript 的作用 3. HTML.CSS 和 ...

  8. 跟班学习JavaScript第一天——运算符、数据类型、ECMAScript

    1.js概述 js属于脚本语言,属于弱类型的编译性语言 JAVAScript=ECMAScript(es)+bom(browser object model)+dom(document object ...

  9. JavaScript学习(六)数据类型

    基本类型的方法 基本类型 是原始类型中的一种值. 在 JavaScript 中有 6 种基本类型:string.number.boolean.symbol.null 和 undefined. 对象类型 ...

最新文章

  1. QIIME 2用户文档. 15进行纵向和成对样本比较q2-longitudinal(2018.11)
  2. python自学攻略-Python自学攻略
  3. 杭州人有福了!菜鸟配送升级新增24小时送药服务
  4. 残差网络(ResNet)
  5. 测试keepalived备备模式
  6. Django框架架构总览
  7. 学生信息管理系统之优化篇
  8. 车载电子电器防水防尘等级介绍
  9. 营销工具-优惠券相关设计思路
  10. android获取wifi开关,Android WiFi开发(一)--WiFi开关与状态监听
  11. Analysis of Struts2 : http://wenku.baidu.com/view/ad421874a417866fb84a8e75.html
  12. python安装成功截图_上传Anaconda 3 安装好后在电脑开始里面的截图。
  13. 关于给汶川地震灾区捐款
  14. WPS表格 - 数字累加技巧总结
  15. android ratingbar 高度,android - 如何减小Ratingbar的大小?
  16. 从前端工程师到前端架构师, 我们经历了什么?
  17. 新中大SE(ngpower)增加操作员
  18. 联想ThinkPad系列笔记本进bios设置u盘启动教程
  19. IEEE 802.3简介及各分类标准汇总
  20. 给初学编程解题没思路的学生的建议

热门文章

  1. java injector_java – Injector Hierarchy / Child Injector解释?
  2. 【搭建方案】户外环境下4G网络安防摄像头监控国标GB28181协议如何快速实现手机直播?
  3. 鸿蒙系统手机更新时间,来了!华为“鸿蒙”系统发布时间提前确认,90%以上手机都能升级...
  4. CentOS配置bond
  5. Web前端技术开发学习笔记(HTML标记语言篇)——第6章 图片标记
  6. Linux BOND接口配置
  7. 脸型分类-Face shape classification using Inception v3
  8. 异常控制流(Exception Control Flow)
  9. Gradle ‘Android‘ project refresh failed Error:Connection timed out: connect
  10. 神经网络中的常用算法-BN算法