二. 变量初步
ECMAScript是一种弱类型语言,表现为变量只是用于保存值的占位符。换言之,变量可以用来保存任何类型的数据。
给变量mind,age赋值:
MyMood=”happy”; MyAge=”27”;
Js不要求提前声明变量,但是声明变量是一个良好的习惯。你可以一次声明多个变量:
var MyMood,MyAge
或者更加精炼:
var MyMood=”happy”,MyAge=”27”;
三. 六大数据类型(其实就是变量类型)
ECMAScript包括5种简单数据类型和1种复杂数据类型。
五类简单数据类型:undefined,null ,bolean,number和string。
一类复杂数据类型:object。Object本质上是由一组无序的名值对组成的。
【首先,运用typeof操作符看数据类型】
typeof其实是一个判断+输出的过程。但是typeof不是一个函数。
alert(typeof(变量))
alert(typeof(59));//59是一个数值,输出”number”
问题:在js中键入alert(typeof(变量))可能返回哪些值?
以下就这个问题分类讨论之。
1.Undefined
字面意思是未定义,只有一个值就是undefined。一个数据未声明时,alert(typeof)结果会产生错误,但是返回的就是undefined。如果声明了变量但未初始化(即定义数据类型),比如我var a; alert(a)输出的都是undefined数据型。结果是一样的。
换言之,以下情况会返回undefined:你真的没定义;定义了,但是没给值。
因此我们可以得出结论:js中不强求提前声明变量。
那为什么声明变量是良好的习惯呢?
更好的判断:如果我们做到事事在事前声明,当typeof返回undefined时,就知道该变量未被声明,而不是未被初始化(未定义数据类型)。
那要不要凡事初始化?这在其它编程语言中或许是个不错的习惯,然而在此没必要。毕竟ECMAScript是一个弱类型语言,变量本身不具有类型。
2. Null空对象
Null表示一个空对象,所以对其进行typeof判断,输出的是object(对象)。自身只有一个值那就是null。实际上undefined派生自none,在直接的判断中,null==undefined的判断值为true。但是二者的应用范围完全不同。最明显的例子是当你声明了一个对象,但是还没存放东西,都应该明确声明为null。
3. Boolean类型
布尔值数据只有两个字面值那就是true和false。函数Boolean(a)可以把数据a转化为布尔值。当a为一下数据类型时。判断如下:
真的:true
非零的数字,非空的字符串(除了var a=""),非空对象为真。
假的:false
数字0和NaN 空字符串 空对象(null)undefined
布尔值常被用于函数控制语句中。
4. number
数字类型:在其它强类型语言中,数字包括整数(number)和浮点数(float),在js中通通定义为number。
浮点数值要求数值必须包含一个小数点,且小数点必须有一位小数。浮点数最多被解析为17位。如阿伏伽德罗常数可表示为:6.22e22。而0.1+0.2的结果是0.3+4*10^(-17).储存的值也不是无限的。只是说超过一定的值后,系统判定为Infinity(无限)值。
【数据类型转换示例——字符串转换数字】
(1)parsInt()和parsInt()
给它一个字符串,可以从左往右提取第一段数字为整数。
如果parsInt(12px),结果为12。
parsInt(12px34)结果为12;
parsInt(px)结果为NaN(Not a Number):不是一个数字。NaN(非数值)是一个特殊的数值。NaN和任何东西运算都是NaN,它与任何值都不相等,包括NaN本身。
为什么要把NaN定义为数值?——因为任何值除以非数值都会导致代码停止执行,如果把NaN定义为一个数值,出现这种情况(设计NaN的任何数值计算),都自动返回NaN,就不会出错了。
如何检测NaN?:
(2)显式(强制)转换——isNaN函数
isNaN函数:把可能转换为数值的数据(字符串,布尔值)尽可能转换为数值,再进行判断,非数值才返回true。如isNaN(“95”)转换结果为95,判断结果为false。再如:isNaN(“true”)转换结果为1,判断结果为false。也就是说当isNaN返回为true时,所判断的对象就不是一个数字。
设想情景:假设两个文本输入框(txt1,txt2),一个按钮,在文本输入框输入数字,点击按钮弹出数字之和。如果用户在文本框输入的是字符串,写一个函数弹出警告。
var num=parseInt(oTxt1.value)+parseInt(oTxt2.value); if(isNaN(num)){ alert(‘您输入的计算参数不正确‘); }else{alert(num)}
这样对用户友好些。
(3)隐式类型转换:
var a=‘12‘; var b=12; alert(a==b)
输出值为true,偷偷地转换了。
但如果最后一行是alert(a===b)
输出值为false;
再看另外一个例子
var a=‘12‘; var b=‘7‘; alert(a-b);
结果为5.
结论:四则运算中,除了加法,其它都是隐性转换。
5.string
字符串,理论上包在单引号,双引号内的内容都是字符串。如果字符串包含引号回车等数据,需要用到字符字面量(类似HTML实体)来处理
字符串是只读的。实际操作中可以用"java"+"script"这样的方法给变量添加储存,但本质上是重新赋值!
转换为字符串推荐使用“string()”函数。自变量是什么值,就被转换为对应的字符串。
6.object
广义来说,js中所有都是对象。但狭义地说,对象是一组数据和功能的集合。属于复合类型。声明一个新对象可以用
var a=new Object();
那么我们可以断言,除了数字、字符串、布尔值、undefined外,一切都是对象。
数组,日期也是对象。
关于对象的种种属性,将在以后阐述。