JavaScript学习笔记整理(2):类型、值和变量
1、数据类型
JavaScript语言的每一个值,都属于某一种数据类型。 JavaScript共有六种数据类型:数值(number):整数和小数
字符串(string):字符组成的文本
布尔值(boolean):true和false两个特定值。
undefined:表示未定义或不存在。
null:表示空缺,即此处应该有一个值,但此时为空。
对象(object):各种值组成的集合。
通常,我们将数值、字符串、布尔值称为原始类型(primitive type),即它们是最基本的数据类型,无法再细分了。而将对象称为合成类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于undefined和null,一般将它们看成两个特殊值。2、typeof运算符
在JavaScript中,我们可以用typeof运算符来确定一个值到底是什么类型。typeof 12 // "number"
typeof '12' // "string"
typeof false //"boolean"
(2)函数
函数返回function。function a(){}
typeof a // "function"
(3)undefined
undefined返回undefined。typeof undefined // "undefined"
可用typeof检测一个变量是否声明。if(typeof a === "undefined" ){
}
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
3、数值
JavaScript不区分整数值和浮点数值。JavaScript中的所有数字均用浮点数值表示。 JavaScript采用IEEE 754标准定义的64位浮点格式表示数字。十进制:没有前导0的数值。
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的七个阿拉伯数字的数值。
十六进制:有前缀0x或0X的数值。
二进制:有前缀0b或0B的数值。
在十六进制中,0~9之间的数字和a(A)~f(F)之间的字母构成,a~f的字母对应的表示数字10~15
在浮点数中,我们还可以用指数记数法来表示,即在实数后跟字母e或E,后面再跟正负号,其后再加一个整型的指数。这种记数方法表示的数值,是由前面的实数乘以10的指数次幂。
12e3 /// 12*10*10*10=12000
1234567890123456789012
// 1.2345678901234568e+21
(2)小数点后的零多于5个// 小数点后紧跟5个以上的零,
// 就自动转为科学计数法
0.0000003 // 3e-7
特殊数值
-0 === +0 //true
NaN === NaN //false
isNaN方法可以用来判断一个值是否为NaN。isNaN(NaN) //true
isNaN(12) //false
注意:isNaN只对数值有效,如果传入其他值,会被先转成数值。比如,传入字符串的时候,字符串会被先转成NaN,所以最后返回true,这一点要特别引起注意。也就是说,isNaN为true的值,有可能不是NaN,而是一个字符串。isNaN('a') //true
typeof value === 'number' && isNaN(value)
判断NaN更可靠的方法是,利用NaN是JavaScript之中唯一不等于自身的值这个特点,进行判断。value !== value
4、字符串
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。'a'
"a"
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。'a \'b\' '
字符串默认只能写在一行中。如果要拆分成数行,每行必须以反斜杠(\)结束。var a = " Hello \
world \
! \";
推荐在HTML中使用双引号,在JavaScript中使用单引号。var a = 'Hello' + 'world';
字符串可以被视为字符数组,因此可以使用数组的方括号运算符,用来返回某个位置的字符(位置编号从0开始)。
var a = 'hello';
a[0] // "h"
a[1] // "e"
length属性返回字符串的长度,该属性也是无法改变的。var a = 'hello';
delete s[0];
s // "hello"
s[0] = 'a';
s // "hello"
\0 null(\u0000)
\b 后退键(\u0008)
\f 换页符(\u000C)
\n 换行符(\u000A)
\r 回车键(\u000D)
\t 制表符(\u0009)
\v 垂直制表符(\u000B)
\' 单引号(\u0027)
\" 双引号(\u0022)
\ 反斜杠(\u005C)
5、null和undefined
null是JavaScript语言的关键字,常用来描述“空值”。 对null执行typeof运算,结果会返回“object”,也就是说,可以将null认为是一个特殊的对象值。 undefined undefined表示“未定义”6、布尔值
布尔值表示真或假。这个类型只有两个值,保留字true 和false。 下列运算符会返回布尔值:两元逻辑运算符: && (And),|| (Or)
前置逻辑运算符: ! (Not)
相等运算符:===,!==,==,!=
比较运算符:>,>=,<,<=
布尔值常用于JavaScript总的控制结构中。例如,JavaScript中的if..else语句,如果布尔值为true执行第一段逻辑,如果为false执行另一段逻辑。
如果JavaScript预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。
undefined
null
false
0
NaN
""或''(空字符串)
7、变量声明
在JavaScript程序总,使用一个变量之前应当先声明。 变量是使用关键字var来声明的。 变量的声明和赋值,是分开的两个步骤,上面的代码将它们合在了一起,实际的步骤是下面这样。var a;
a=1;
JavaScirpt是一种动态类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值。
如果只是声明变量而没有赋值,则该变量的值是undefined。undefined是一个JavaScript关键字,表示“无定义”。
如果一个变量没有声明就直接使用,JavaScript会报错,告诉你变量未定义。var a=1;
var a;
a //1
但是,如果第二次声明的同时还赋值了,则会覆盖掉前面的值。
var x=1;
var x=2;
x //2
声明提前(变量提升)
var scope='global';
function f(){
console.log(scope); //输出‘undefined’,而不是‘global’
var scope='local'; //变量在这里赋初始值,但变量本身在函数体内任何地方均是有定义的。
console.log(scope); //输出‘local’
}
var scope='global';
function f(){
var scope; //变量会提前到函数头部执行
console.log(scope); //输出‘undefined’,而不是‘global’
scope='local'; //上面已经声明,这里只是赋值
console.log(scope); //输出‘local’
}