数据类型即其相互转换

  • 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;            //同上
 
  • Tips:一般操作数据时将其转换成相同数据类型再操作;
  • Tips:常用  可将数值与空字符串连接以将其转换成字符串,可将字符串减0以将其转换成数字
 
posted @ 2016-04-19 18:53  Lazymr  阅读(264)  评论(0编辑  收藏  举报