JS基本概念 -- 数据类型(一)
ECMAScript中有5种简单数据类型(也成为基本数据类型): Undefined、Null、Boolean、Number、String;
1种复杂数据类型: Object,Object本质上是由一组无序的名值对组成的。
ECMAScript不支持任何创建自定义类型的机制,所有值最终都将是上述6种数据类型之一。
1.typeof操作符
typeof操作符用来检测给定变量的数据类型。对一个值使用typeof操作符可能返回下列某个字符串:
- undefined --- 如果这个值未定义
- boolean --- 如果这个值是布尔值
- string --- 如果这个值是字符串
- number --- 如果这个值是数值
- object --- 如果这个值是对象或null
- function --- 如果这个值是函数
var message = "some thing";
alert(typeof message); //string
alert(typeof (message)); //string typeof是操作符而不是函数,因此圆括号可以使用,但不是必须的
alert(typeof 95); //number
alert(typeof false); //boolean
alert(typeof null); //object
2.Undefined类型
Undefined类型只有一个值,即特殊值undefined。 在使用var声明变量但未对其加以初始化时,这个值就是undefined。
var message;
alert(message == undefined); //true
包含undefined值的变量与尚未定义的变量是不一样的:
var message;
alert(message); //undefined //下面这个变量并没有声明
//var age;
alert(age); //Uncaught ReferenceError: age is not defined
对未声明的变量执行typeof操作符同样也会返回undefined
var message;
alert(typeof message); //undefined //下面这个变量并没有声明
//var age;
alert(typeof age); //undefined
3.Null 类型
Null类型只有一个值,这个特殊值是null。从逻辑角度看,null值表示一个空对象指针,而这也正是使用typeof操作符检测null值时会返回"object"的原因。
var car = null;
alert(typeof car); //object /* 如果定义的变量准备在将来用于保存对象,
* 那么最好将该变量初始化为null
* 这样一来,只要检查null值就可以知道相应的变量是否已经保存了一个对象的引用
*/
if(car != null){
//
}
4.Boolean类型
Boolean类型是ECMAScript中使用得最多的一种类型,该类型只有两个字面值:true 和 false。
Boolean类型的字面值true和false是区分大小写的,True和False都不值Boolean值,只是标识符。
虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。
要将一个值转换为其对应的Boolean值,可以调用转型函数Boolean()
var message = "Hello World";
var messageAsBoolean = Boolean(message);
alert(messageAsBoolean); //true
各种数据类型及其对应的转换规则
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | flse |
String | 任何非空字符串 | ""(空字符串) |
Number | 任何非零数字值(包括无穷大) | 0 和 NaN |
Object | 任何对象 | null |
Undefined | undefined |
这些转换规则对理解流控制语句(如 if 语句)自动执行相应的Boolean转换非常重要:
var message = "Hello World";
if(message){
alert("Value is true");
}
5.Number类型
Number类型使用IEEE754格式表示整数和浮点数值。为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。
var intNum = ; //十进制整数 /*
*八进制字面值的第一位必须是零(0),然后是八进制数字序列(0~7)。
*八进制字面量在严格模式下是无效的
*/
var octalNum1 = ; // 八进制的56
var octalNum2 = ; // 无效的八进制数值 --- 解析为79
var octalNum3 = ; // 无效的八进制数值 --- 解析为8 /*
*十六进制字面值的前两位必须是0x,后跟任何十六进制数字(0~9 A~F)
*字母可以大写,也可小写
*/
var hexNum1 = 0xA; //十六进制的10
var hexNum2 = 0x1f; //十六进制的31 /*在进行算术计算时,所有以八进制和十六进制表示的数值最终都将被转换成十进制*/
/*浮点数值*/
var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .; // 有效,但不推荐 var floatNum4 = .; //小数点后面没有数字 -- 解析为1
var floatNum5 = 10.0; //整数 -- 解析为10
5.1数值范围
ECMAScript能够表示的最小数值保存在Numer.MIN_VALUE中,最大值保存在Number.MAX_VALUE中。
alert(Number.MIN_VALUE); //5e-324
alert(Number.MAX_VALUE); //1.7976931348623157e+308
如果某次计算结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。
具体来说,如果这个数值是负数,则会被转换成-Infinity。如果是正数,则会被转换成Infinity。
Infinity不是能够参与计算的数值,可以使用isFinite()函数确定数值是否位于有效区间内。
var max = Number.MAX_VALUE * Number.MAX_VALUE;
var min = - Number.MAX_VALUE;
alert(isFinite(max)); //false
alert(isFinite(min)); //true
5.2 NaN
NaN,即非数值(Not a Number)是一个特殊值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
NaN 有两个非同寻常的特点:
- 任何涉及NaN的操作都会返回NaN
- NaN与任何值都不相等,包括NaN本身。
var num = 10*NaN;
alert(num); //NaN alert(NaN == NaN); //false
ECMAScript定义了isNaN()函数,这个函数接收一个参数,该参数可以是任何类型。函数在接收到参数后会尝试将这个值转换为数值。不能被转换为数值的值将返回true
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false (10是一个数值)
alert(isNaN("10")); //false (可以被转换成数值10)
alert(isNaN("blue")); //true (不能转换成数值)
alert(isNaN(true)); //false (可以转换成数值1)
alert(isNaN(false)); //false (可以转换成数值0)
5.3 数值转换
有三个函数可以把非数值转换为数值:
- Number():可用于任何数据类型
//1.如果是Boolean值,true -- 1; false --- 0
alert(Number(true)); //
alert(Number(false)); // //2.如果是数字值,只是简单地传入和返回
alert(Number(10)); //
alert(Number(-10)); //-10 //3.如果是null值,返回0
alert(Number(null)); // //4.如果是undefined,返回NaN
alert(Number(undefined)); //NaN //5.如果是字符串,遵循下列规则
//5.1 如果字符串只包含数字(包括前面带正号或负号的情况),则将其转换成十进制数值
alert(Number("123")); //
alert(Number("+011")); //11 (前置0被忽略)
alert(Number("-1993")); //-1993 //5.2 如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值
alert(Number("1.1")); //1.1
alert(Number("01.1")); //1.1
alert(Number("-01.1")); //-1.1 //5.3 如果字符串中包含有效的十六进制格式,则将其转换成十进制整数值
alert(Number("0xf")); // //5.4 如果字符串是空的,则将其转换成0
alert(Number("")); // //5.5 如果字符串中包含除上述格式之外的字符,则将其转换成NaN
alert(Number("blue")); //NaN
alert(Number("123blue"));//NaN
alert(Number("blue123"));//NaN /*
*6.如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。
* 如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的字符串值
*/ - parseInt():把字符串转换成数值。在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。
//1.如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。
alert(parseInt("")); //NaN
alert(parseInt("xx999")); //NaN //2.如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或遇到了一个非数字字符。
alert(parseInt("999")); //
alert(parseInt("-999"));//-999
alert(parseInt("999aaa"));//
alert(parseInt(22.5)); // //3.如果字符串中的第一个字符是数字字符,parseInt()也能够识别出各种整数格式
alert(parseInt("0xA")); //10 (十六进制)
alert(parseInt("70")); //70 (十进制)
alert(parseInt("000")); //0 (十进制)
alert(parseInt("007")); //7 (十进制) /*
*4.在解析八进制字面量的字符串时,ECMAScript 3和5存在分歧
*ECMAScript3 认为是56(八进制), ECMAScript5认为是70(十进制)
*可以为这个函数提供第二个参数:转换时使用的基数(即进制数)
*/
alert(parseInt("070", 8)); //56 (八进制)
alert(parseInt("0xAF", 16)); //
alert(parseInt("AF", 16)); //175 指定了进制数,可以省略0x alert(parseInt("10", 2)); //
alert(parseInt("10", 8)); //
alert(parseInt("10", 10)); //
alert(parseInt("10", 16)); // - parseFloat():从第一个字符(位置0)开始解析每个字符。一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。
//1.字符串中的第一个小数点是有效的,第二个就无效了,因此他后面的字符串将被忽略。
alert(parseFloat("22.34.5")); //22.34 //2.会忽略前面的0,只解析十进制数,没有第二个参数
alert(parseFloat("098.5")); //98.5
alert(parseFloat("098.5Blue"));//98.5
alert(parseFloat("098Blue.5"));//
alert(parseFloat("070.5"));//70.5
alert(parseFloat("0Ax"));// //3.如果字符串时一个可解析为整数的数,则返回整数
alert(parseFloat("1234")); //
alert(parseFloat("1234Blue"));//
JS基本概念 -- 数据类型(一)的更多相关文章
- JS基础概念
JS基础概念 1. 算法及流程图 算法类型:1.算数算法:2.事务性算法(解决某个问题的方法和先后顺序). JS语法概述 1. 引入JS的方法 1.用<script src="&quo ...
- js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组
js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...
- JS与JAVA数据类型的区别
JavaScript与Java数据类型的区别 阅读目录 Number String Boolean Null Undefined Object 今天开始正式认真学习js,虽然在平常j2ee开发中也 ...
- JS的八大数据类型
js中的数据类型,包括基本数据类型(Number,String,Boolean, Undefined,Null)和 复杂(引用)数据类型(Object,Array,Function) 基本数据类型 ...
- Js的typeof和Js的基本数据类型
本文将从以下几个方面介绍Js的typeof和Js的基本数据类型: ** Js的typeof的用法 ** Js的基本数据类型 ** 使用基本类型使用typeof的返回结果 ** Js的typeof的用法 ...
- js中的数据类型
JS中的数据类型: ——数字 (number)NaN ——字符串(string) ——布尔 (boolean)——函数 (function) 也是对象的一种 ——对象 (object) ...
- 如何判断js中的数据类型?
js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...
- 如何判断js中的数据类型
如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个例子: var a = "iamstri ...
- [转]如何判断js中的数据类型
原文地址:http://blog.sina.com.cn/s/blog_51048da70101grz6.html 如何判断js中的数据类型:typeof.instanceof. constructo ...
随机推荐
- EDM博主笔记:EDM邮件营销的几个细节问题
其实说起EDM邮件营销很多做过的人都知道,目前国内邮件营销的效果其实是比较差的,为什么?因为国内没有多少使用邮件的习惯,如果不是工作所需估计很多的人都几天不碰邮件了,但是反观国外 邮件是其日常的一部分 ...
- 各种UserAgent的列表
User Agent是浏览器用于 HTTP 请求的用户代理头的值.更换User Agent能更好的模拟出不同的系统和浏览器信息. Android Name User Agent Nexus 7 (Ta ...
- 一种高效的 vector 四则运算处理方法
实现 vector 的四则运算 这里假设 vector 的运算定义为对操作数 vector 中相同位置的元素进行运算,最后得到一个新的 vector.具体来说就是,假如 vector<int&g ...
- 关于 iOS 的一些学习资料
iOS.Book.Effective Objective-C 2.0 1. 中文翻译版 (更新中) https://github.com/HagerHu/effective-objective-c-2 ...
- Logstash日志搜集
软件准备: logstash-2.1.0.zip elasticsearch-2.1.0.zip kibana-4.3.0-windows.zip Redis-x64-2.8.2104.msi 下载地 ...
- 析构函数和Dispose的使用区别
老生常谈的问题了,MSDN也有非常详细的说明但看起来不是很系统.也曾经做过分析,但没有总结下来又忘了,这次整理一下MSDN和网上搜集的一些资料,以备不时只需. 下面是MSDN对这两个函数的建议使用方法 ...
- win7中的画图
下午做一个图像篡改定位实验,在win7下对图像进行修改,然后通过其最低位判断篡改位置. 程序如何都调试不出来.反复简化程序,发现win7中的画图对图像存在优化. 当更改图像后,会自动调整当前图像的显示 ...
- 剑指架构师系列-Struts2的缓存
Struts2的缓存中最重要的两个类就是ReferenceMap与ReferenceCache.下面来解释下ReferenceCache中的get()方法. public V get(final Ob ...
- 使用 Web Tracing Framework 分析富 JS 应用的性能
来自谷歌的 Web Tracing Framework 包含一组工具和脚本,用于 JavaScript 相关代码的性能分析.它是重 JavaScript 应用程序的理想选择,而 JavaScript ...
- python反射机制深入分析
对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...