- JavaScript中数据类型有:
-
- 三种基本数据类型: 数值,字符串,布尔;
- 两种小数据类型:null,undefined;
- 还有一个种复杂的数据类型:对象;
- 检测数据类型可以用typeof操作符,注意typeof只是一个操作符;它会返回number,boolean ,string object , function,undefined等六种结果
console.log(typeof 2); //number
console.log(typeof '2'); //string
console.log(typeof true); //boolean
console.log(typeof undefined); //undefined
console.log(typeof null); //object *null也是一个对象*
console.log(typeof {name:'lazy',age:20}); //object
console.log(typeof [1,2,3]); //object *数组是对象啊*
console.log(typeof function(){}); //function
-
- typeof的优先级
console.log(typeof lazy+2); //undefined1 typeof的优先级高于+ -等双目操作符
-
- 对于尚未申明的变量,只能执行一项操作,那就是typeof;但需要注意对于未声明或者未初始化的变量执行typeof都会返回undefined;
var lazy;
//var chen;
console.log(typeof lazy); //undefined
console.log(typeof chen); //undefined
- null和undefined类型
-
- null(空对象指针),undefined(未赋值,未声明)【注:函数默认return的是undefined】
- 实际上undefined是派生自null的,所以检测相等性是相等的;但用途不一样,比如如果定义的变量准备将来用于保存对象,那么最好将其初始化为null,这样也体现null作为空对象指针的性质。
- 布尔类型
-
- 显示转换成布尔类型可通过布尔操作符中的!!方式,或者调用Boolean()函数
- 两个布尔值相加时会被转换成数字后再执行加,true+true=2;
- 布尔类型的数据可以说在JS中是使用得最多的一种了,它对于流控制语句(如if语句)来说非常重要,这些语句中会自动执行Boolean转换,调用Boolean()函数:
数据类型 转换为true的值 转换为false的值 String 非空字符串 “”空字符串 Number 非零数字(包括Infinity) 0和NaN Object(调用valueOf方法) 任何对象 null Undefined — undefined null — null
- 数字类型
-
- 数值字面量格式可以是十进制,八进制(第一位是0且后面跟八进制数字序列0~7),十六进制(以0x或0X开头,后面跟十六进制数字0~9及A/a~F/f);但计算时都是按照十进制来的;
- 浮点数值计算会产生误差,对于极大极小的值可以用 e表示法
- JS能够表示的最小数值保存在Number.MIN_VALUE中,最大数值保存在Number.MAX_VALUE
- 当某次计算得到的结果超出了JS数值范围,如果这个结果是负数就会得到-Infinity,正数则Infinity,可以用isInfinity()来检测
- NaN ,not a Number,用于表示本该得到一个数值操作数却未能得到的数值的情况(这样就不会报错了) 任何涉及NaN的操作都会返回NaN(如NaN/10 ,0/0也会得到NaN);NaN与任何值都不相等,包括它本身;可以用isNaN()来检测,isNaN()会把接受的参数首先转换成数值,如果能转换成数值则返回false,不能则true;
- 数值转换:有三个函数Number(),parseInt(),parseFloat();Number()可用于任何数据类型;而parseInt()和parseFloat()则专门用于把字符串转换成数值的,但实际上可以直接用字符串减0的方式将其转换成数字
- Number()的转换规则:
console.log(Number(undefined)); //NaN
console.log(Number(null)); //0
console.log(Number('')); //0
console.log(Number('0123')); //123 只包含数字
console.log(Number(0xA)); //10 其他进制
console.log(Number('abc')); //NaN 包含除上述两种的其他格式 则NaN
-
- parseInt()的转换规则:
console.log(parseInt('')); //NaN
console.log(parseInt(' 1 23red')); //1 **开头忽略空格,遇到非数字则停止解析,包括小数点
console.log(parseInt('-456')); //-456 开头为数字或负号
console.log(parseInt('red123')); //NaN 开头
console.log(parseInt('55blue66')); //55 遇到非数字则停止解析
console.log(parseInt('0xA',16)); //10 十六进制,注意第二个参数基数
-
- parseFloat()
console.log(parseFloat('0xA')); //10 只支持十进制,八、十六进制会被转成0
console.log(parseFloat('123')); //123 若可解析成整数则返回整数
-
- 转换为数字表:
值 转换为数字的结果 转换规则 String>非空字符串 — 只有数字的话则十进制忽略前导的零(正负号或浮点均保留);若包含合法十六进制则转为十进制;其他格式的话会转换失败,则得到NaN Object — 调用valueOf方法,直接得到数字;不行的话调用toString(),再对字符串按照前面的方法进行转换 String>空字符串 0 — Undefined NaN — null 0 —
- 转换为数字表:
- String类型
-
- 转字符串常用的有toString()方法,更简洁的是将其与空字符串用‘+’号连接;除了null和undefined其他数据类型都有toString()方法来将其转换成字符串表现,null和undefined调用的是string();
- 全角与半角的length一样;
- escape ,unescape,encodeURL,decodeURL等等
- 字符串都是常量,但是依然可以像对象一样使用.length等方法;
- 对字符串的一些基本操作:
-
- 取单个字符串建议用charAt()函数;
- subString(start,stop)取包括start但不包括stop下标的子字符串,若只有一个参数,则从start到结束;
- substr(start,length)取从开始到一定长度的子字符串;
- indexOf(searchValue)用于检索指定字符串值位于字符串的位置,若不存在则返回-1;
- 转换为字符串表: 都不变,对象将调用toString()方法
- Object类型
-
- 无序的名值对集合,包括数组,函数等;
- 【注:JS中对基本数据类型的操作是直接对值进行操作,而对复杂对象则是通过引用来的】
- 【注:null其实也是一个对象】
- 可以用方括号加字符串的形式访问对象的属性,比如image['height'];
- 用于字符串环境会调用对象的toString()方法,用于数字会优先调用valueOf()方法得到对象的数字或者布尔或者字符串表示;
- 这里说一下数组:
-
- JS不支持多维数组,但可以嵌套,举几个例子:
var a= [];
a[ 0]= 3;
a[ 50]= {x:1 ,y:2 }; //可嵌套,数组是稀疏的,不会分配连续内存;
a[salary] =2; //非数字的下标会被转换成字符串,是给数组定义了一个命名属性, length并不会改变
a[ -2.5] =3; //同上
a[ 0]= 3;
a[ 50]= {x:1 ,y:2 }; //可嵌套,数组是稀疏的,不会分配连续内存;
a[salary] =2; //非数字的下标会被转换成字符串,是给数组定义了一个命名属性, length并不会改变
a[ -2.5] =3; //同上
- Tips:一般操作数据时将其转换成相同数据类型再操作;
- Tips:常用 可将数值与空字符串连接以将其转换成字符串,可将字符串减0以将其转换成数字