JavaScript高级程序设计(三):基本概念:数据类型
特别注意:ECMAScript是区分大小写的。
一、变量
1、ECMAScript的变量是松散型的。所谓松散型就是可以用来保存任何类型的数据。即每个变量仅仅是一个用于保存值的占位符而已。定义变量时要使用var操作符,后跟变量名。
注意:省略var操作符,从而可以创建一个全局变量。不推荐这样的做法。
2、多个变量定义,用多个逗号隔开即可:
var messgage='',
content=,
example=false;
二、数据类型
ECMAScript有五种简单【基本】数据类型:undefined、null、Boolean、String、Number。还有一种复杂的数据类型:Object。Object是由一组无序的名值对组成的。ECMAScript不支持任何创建自定义类型的机制。而所有值最终都将是上述6中数据类型之一。
(一)、typeof操作符
typeof用来检测变量的数据类型。对一个值使用操作符typeof可能返回下列某个字符串:
“undefined”:该值未定义;
“boolean”:该值是布尔值;
“string”:该值是字符串;
“number”:该值是数值;
“object”:该值是对象或null;
“function”:该值是函数。
具体的用法:
var message='';
alert(typeof (message));
alert(typeof message);
alert(typeof );
这几个例子说明,typeof操作符的操作数可以是变量,也可以是数值字面量。注意:typeof是一个操作符而不是函数。所以圆括号可以使用,但是不是必需的。
特殊点:typeof null会返回“object”,因为特殊值null被认为是一个空的对象引用。Safari5及之前版本、Chrome7及之前版本会返回“function”,其他浏览器都会返回“object”。
(二)、数据类型的关键点
1、未初始化的变量默认取得undefined值。
Number
2、Number类型分为整数型和浮点型【即双精度数值】。保存浮点类型数值需要的内存空间是保存整数型数值的两倍。因此ECMAScript会不遗余力的将浮点类型转换为整数类型。
3、极大或极小的浮点值,可以用科学计数法e来表示。例如:
var f=3.25e5;<======>var f=325000
var m=0.00003; <=======>var m=3e-5;
4、浮点值最高精度是17位小数。但在进行算术计算时,其精度远远不如整数。例如:0.1+0.2的结果不是0.3 ,而是0.30000000000000004。
5、Js由于内存的限制,不能保存世界上所有的数值。最小数值保存在Number.MIN_VALUE,最大数值保存在Number.MAX_VALUE.若超出Number.MIN_VALUE,返回-infinity;超出Number.MAX_VALUE返回Infinity【正无穷】。
6、判断一个数值是否超出了JS的数值范围,可以isFinite()方法:
var result=Number.MAX_VALUE+Number.MAX_VALUE;
console.log(isFinite(result)); //false
NaN
7、NaN表示一个本来要返回数值的操作未返回数值的情况【这样就不会报错了】。
8、NaN有两个特点:首先:任何涉及NaN的操作都会返回NaN; 其次,NaN不等于任何值,包括自己本身。
alert(NaN==NaN); //false
9、针对NaN的两个特点,ECMAScript制定了isNaN()【“不是数值”】的方法,判断一个参数是否不是数值。也可以用于对象的判断。具体的解析情况:
alert(isNaN(NaN)); //true (NaN不是数值)
alert(isNaN()); //false
alert(isNaN("")); //false("10"可以被转换为数值)
alert(isNaN("hello")); //true("hello"可以被转换为数值)
alert(isNaN(true)); //false(true可以被转换为数值:1)
10、将非数值转换为数值的三个方法:Number()、 parseInt()、parseFloat()。
11、Number()转换为数值的规则:
1)Boolean转换为0和1;
2)空字符串、null转换为0;undefined转换为NaN;
3)整数数值和浮点数值,简单的传入和返回;
4)若字符串包含十六进制格式,例如:“0xf”,则转换成相同大小的十进制数值;
5)其他无法转换的返回:NaN;
6)对象也可以进行转换。原理是:调用对象的valueOf()方法,然后转换。
var num1=Number('hello'); //NaN
var num2=Number(""); //
var num3=Number('true'); //NaN (boolean字符串转换不了)
var num4=Number(true); //
var num5=Number(""); //0
var num6=Number('01.230'); //1.23
注意:处理整数类型的转换,最常使用的是:parseInt();
12、parseInt()数值转换规则:
1)更多看其符合数值模式;
2)忽略字符串前面的空格,从第一个非空字符开始进行识别转换;
3)若第一个非空字符不是负号或不是数字,parseInt()会返回NaN,【即parseInt()在解析空字符串时候,返回的是NaN】;
4)parseInt()是一个字符一个字符解析字符串,直到解析完字符串或者遇到一个非数字字符。
5)若字符串第一个字符是数字字符,parseInt()也能够识别出各种整数格式(十进制、八进制【以0开头】、十六进制【以0x开头】);
eg:
var num1=parseInt(''); //NaN (空字符)
var num2=parseInt('1234hello'); //
var num3=parseInt('22.3'); //
var num4=parseInt('he220'); //NaN
var num5=parseInt(''); //56(八进制)
var num6=parseInt(''); //
var num7=parseInt('0xf'); //15(十六进制数)
注意点:parseInt()在解析八进制的时候,ECMAScript3 和5存在歧义。
var num=parseInt(''); //ECMAScript 3认为是 56(八进制);但是ECMAScript 5认为是:70(十进制)
原因是:ECMAScript 5 JS引擎中,parseInt()不再具有解析八进制的能力,因此,会认为前面的0是无效的。
解决之法是:parseInt()方法增加了第二个参数,表示转换时使用的基数(即多少进制)。
eg:
var num=parseInt('0xf',); //15 //如果指定具体的基数,字符串可以不用带‘0x’;不指定的话,会返回NaN。如
var num2=parseInt('f',); //
var num3=parseInt('f'); //NaN
指定具体基数,会影响字符串转换的结果:
var num1=parseInt('',); //2 (二进制)
var num1=parseInt('',); //8(八进制)
var num1=parseInt('',); //10(十进制)
var num1=parseInt('',); //16(十六进制)
友情提示:为了避免错误的解析,我们在使用parseInt()时候,要制定具体的基数。
13、parseFloat()的解析规则:【解析原理同parseInt()】
1)十六进制的字符串,始终会解析成0;
2)始终会忽略前导0,不管是十进制还是八进制;
eg:
var f1=parseFloat('120hel'); //120(整数)
var f2=parsetFloat('0xf'); //0(十六进制始终解析为0)
var f3=parsetFloat(''); //NaN(同parseInt())
var f4=parseFloat(09.230); //9.23
var f5=parseFloat(''22.3.); //22.3
String
1、转换为字符串的方法:toString() 和String();
2、数字、布尔类型、对象和字符串都有toString()方法,但是null和undefined没有toString()方法;
3、数字的toString()方法可以传递一个参数,表示转换的基数。【默认的基数是10,即十进制】eg:
var num=;
num.toString(); // '10'
num.toString(); // '1010'
num.toString(); // '12'
num.toString(); // '10'
num.toString(); // 'a'
4、String()转换规则:
1)有toString(),调用并转换返回;
2)null,返回“null”;
3)undefined,返回“undefined”
Object
1、ECMAScript中的对象是一组数据和功能的集合。用关键字new创建对象。
2、Object是所有对象的基础。Object类型具有的属性和方法同样存在于更具体的对象中。Object的每个实例都具有下列属性和方法:
1)Constructor:保存着用于创建当前对象的函数。
2)hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在(而不是存在于实例原型中);参数propertyName必须以字符串的形式指定。
3)IsPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型。
4)propertyIsEnumerable(propertyName):用于检查给定的属性是否能够用for……in语句来枚举。参数必须是字符串形式
5)toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应。
6)toString():返回对象的字符串表示。
7)valueOf():返回对象的字符串、数值或布尔表示。通常与toString()方法的返回值相同。
JavaScript高级程序设计(三):基本概念:数据类型的更多相关文章
- 《JavaScript高级程序设计》 -- 基本概念(一)
之前看过好几遍<JavaScript高级程序设计>这一书,但是始终没有完完整整的看过一遍.从现在开始我会把它完整的啃一遍,每章节都记录笔记,自己的心得,加油! 由于前三章的内容比较简单,因 ...
- 读javascript高级程序设计01-基本概念、数据类型、函数
一. javascript构成 1.javascript实现由三部分组成: ECMAScript:核心语言功能 DOM:文档对象模型,提供访问和操作网页内容的方法和接口 BOM:浏览器对象模型,提供与 ...
- javascript 高级程序设计 三
Sorry,前两张介绍的主题还是JavaScript,而第一章介绍了JavaScript和ECMAScript区别,所以前两章介绍的主题应该改为ECMAScript,但是 标题就不改了因为现在人们习惯 ...
- JavaScript 高级程序设计 02-变量、数据类型
一.JavaScript变量 1.变量的定义 在定义变量时,统一使用关键字var,后跟变量名(即标识符,如果不知道什么是标识符,可以到这去查看),如下 var message; //定义一个变量 注意 ...
- JavaScript 高级程序设计 01-基本概念
一.JavaScript组成 1.一个完成JavaScript是由ECMAScript.DOM.BOM三部分组成的. ECMAScript:提供核心语言功能--语法.类型.语句.关键字.保留字.操作符 ...
- 《JavaScript高级程序设计》读书笔记 ---数据类型
ECMAScript 中有5 种简单数据类型(也称为基本数据类型):Undefined.Null.Boolean.Number.String和Object——复杂数据类型,Object 本质上是由一组 ...
- JavaScript高级程序设计-(2)基础概念
for-in 语句 for-in 语句是一种迭代语句,用来枚举对象属性,语法:for (property in expression) statement实例:for(var propName in ...
- 读javascript高级程序设计00-目录
javascript高级编程读书笔记系列,也是本砖头书.感觉js是一种很好上手的语言,不过本书细细读来发现了很多之前不了解的细节,受益良多.<br/>本笔记是为了方便日后查阅,仅作学习交流 ...
- JavaScript 高级程序设计 目录
为什么会写这个学习教程呢??因为一直以来,学习JavaScript都没有系统的学过,用什么学什么,所以今天开始,重新把JavaScript系统的学一遍!(本人也是菜鸟一枚,语文水平也还是小学程度,看得 ...
随机推荐
- semget() semop()
semget() 可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集: 系统调用:semget();原型:intsemget(key_t key,int nsems, ...
- A Tour of Go Exercise: Slices
Implement Pic. It should return a slice of length dy, each element of which is a slice of dx 8-bit u ...
- hdoj 2083 简易版之最短距离
简易版之最短距离 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- [Xcode使用 - 1] 自定义代码块引用
Xcode本身带有编码常用的代码块可供使用,如下图 例如 “if” 这个代码块的定义 调用方法 1.可以直接拖放带编辑区 2.使用快捷键,键入 “if”, Xcode就会出现自动完成的 ...
- [五]SpringMvc学习-Restful风格实现
1.Restful风格的资源URL 无后缀资源的访问(csdn用法) 2.SpringMvc对Rest风格的支持 2.1将 /*.do改为/ 2.2 3.@PathVariable获取Url变量 @R ...
- MySQL中UNION和UNION ALL的使用
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. MySQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后 ...
- struts2—拦截器
在Struts2中,如果用户没有指定执行哪些拦截器,struts2有一个默认执行的栈,defaultStack; 一旦如果用户有指定执行哪些拦截器,默认的拦截器栈就不会被执行 拦截器配置举例(stru ...
- 【转】phpmyadmin万能密码漏洞
影响版本:2.11.3 / 2.11.4 利用方法:用户名处写入‘localhost’@'@”则登录成功. (注意全部是英文标点符号,最后一个为英文双引号) 附上几个php爆绝对路径的办法: phpM ...
- 关于python文件操作 (转载)
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
- com.opensymphony.xwork2.ActionSupport类源码
version : xwork-2.1.0 /* * Copyright (c) 2002-2006 by OpenSymphony * All rights reserved. */ package ...