数据类型

Number

  • Number数字类型包括常规数字和NaN
  • NaN (not a number) :不是一个数,但它率属于数字类型

    NaN和任何值(包括自己都不相等)NaN!=NaN ,所以我们不能用相等的方式判断是否为有效数字

  • isNaN:检测一个值是否为非有效数字,如果不是有效数字返回true,反之是有效数字返回false
console.log(isNaN('123'))  //false
console.log(isNaN('AA')) //true

console.log(isNaN(10))   //false
  • 将其他值转化为数字类型

  1.Number(val)

   把字符串转换为数字,只要字符串中包含任意一个非有效数字字符(第一个点除外)结果都是NaN,空字符串会变为数字零

          null->0  undefined->NaN

    /把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字

console.log(Number('12.5')); //=>12.5
console.log(Number('12.5px')); //=>NaN
console.log(Number('12.5.5')); //=>NaN
console.log(Number('')); //=>0 

 console.log(Number(true)); //=>1
 console.log(Number(false)); //=>0
 console.log(isNaN(false)); //=>false

 

console.log(Number(null)); //=>0
console.log(Number(undefined)); //=>NaN 


// 把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字
 console.log(Number({name:'10'}));//=>NaN
 console.log(Number({}));//=>NaN
// {}/{xxx:'xxx'} .toString() => "[object Object]" => NaN
 console.log(Number([]));//=>0
// [].toString() -> ''
 console.log(Number([12]));//=>12
// [12].toString() -> '12'
 console.log(Number([12,23]));//=>NaN
// [12,23].toString() -> '12,23' 

 let str = '12.5px';
console.log(Number(str)); //=>NaN
console.log(parseInt(str)); //=>12
console.log(parseFloat(str)); //=>12.5
console.log(parseFloat('12.5px')); //=>NaN 

  2.parseInt/parseFloat(val,进制)

   专门用于字符串转化成数值,对于字符串来说,它是从左到右依次查找有效数字字符,直到遇到非有效数字字符,停止查找(不管后面是否还有数字,都不再找了,把找到的当成数字返回。 

console.log(parseInt('a123'))  //NaN
console.log(parseInt('123a'))  //123

String

所有用单引号、双引号、反引号(撇 ES6模板字符串)包起来的都是字符串,字符串一旦创建就不可修改

  • val.toString()

  

let a = 12;
console.log(a.toString()); //=>'12'
console.log((NaN).toString()); //=>'NaN'  
// null和undefined是禁止直接toString的
// (null).toString() //=>报错
// 但是和undefined一样转换为字符串的结果就是 'null'/'undefined'
// 普通对象.toString()的结果是 "[object Object]"  =>?  =>Object.prototype.toString方法不是转换为字符串的,而是用来检测数据类型的
  • 字符串拼接:四则运算法则中,除加法之外,其余都是数学计算,只有加法可能存在字符串拼接(一旦遇到字符串,则不是数学运算,而是字符串拼接)
console.log('10' + 10); //=>'1010'
console.log('10' - 10); //=>0
console.log('10px' - 10); //=>NaN 
let a = 10 + null + true + [] + undefined + '珠峰' + null + [] + 10 + false;
/*
 * 10 + null -> 10 + 0 -> 10
 * 10 + true -> 10 + 1 -> 11
 * 11 + [] -> 11 + '' -> '11'  空数组变为数字,先要经历变为空字符串,遇到字符串,啥都别想了,直接变为字符串拼接 
 * '11' + undefined -> '11undefined'
 * ...
 * '11undefined珠峰null10false'
 */

Boolean

Boolean:只有两个值 true/false

  • 把其它类型值转换为布尔类型

  只有 0、NaN、''、null、undefined 五个值转换为FALSE,其余都转换为TRUE(而且没有任何的特殊情况)

  Boolean(val)

    

console.log(Boolean(0));
console.log(Boolean(''));
console.log(Boolean(' '));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log(Boolean([]));
console.log(Boolean([12]));
console.log(Boolean(-1)); 

     !/!! 

    !:取反(先转为布尔,然后取反)

    !!:取反再取反,只相当于转换为布尔 <=> Boolean

    

/* console.log(!1); //=>FALSE
console.log(!!1); //=>true */

  条件判断

     // 如果条件只是一个值,不是==/===/!=/>= 等这些比较,是要把这个值先转换为布尔类型,然后验证真假

    

if (1) {
    console.log('哈哈');
}
if ('3px' + 3) {
    //=>'3px3'
    console.log('呵呵');
}
if ('3px' - 3) {
    //=>NaN-3=>NaN
    console.log('嘿嘿');
}

 null / undefined

null和undefined都代表的是没有

null:意料之中(一般都是开始不知道值,我们手动先设置为null,后期再给予赋值操作)

let num = null; //=>let num = 0;  一般最好用null作为初始的空值,因为零不是空值,他在栈内存中有自己的存储空间(占了位置)
num = 12;

undefined:意料之外(不是我能决定的)

let num; //=>创建一个变量没有赋值,默认值是undefined
num = 12;

 object类型

每一object实例都具有以下属性和方法

  • constructor
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在;例如:o.hasOwnProperty("name")
  • isPrototypeOf(Object):用于检查传入的对象是否是传入对象的原型
  • toLocalString()
  • toString():返回对象的字符串表示
let n ={name:'123',id:'123'};
console.log(n.toLocaleString())//=>[object Object]
console.log(n.toString()) //=>[object Object]
  • valueOf():返回值与toString()一样
原文地址:https://www.cnblogs.com/peilin-liang/p/12031790.html