阅读 8

超级小白系列之一坨x的原始数据类型转换

数据类型

数据类型有原始值和引用值两种

  • 原始值 string number null undefined symbol boolean
  • 引用值 object

数据存放,原始值放在栈中,不能进行修改,是传值。引用值是放在堆中,是传址。

var a = 123;
var b = 123;
a===b; // true

var a = [1,2,3];
var b = [1,2,3];
a===b; // false
var c = a;
c === a; // true
a = [1,2,3];
c === a; // false
复制代码

typeof 类型

两种写法:

  • typeof ();
  • typeof➕空格➕参数
  • typeof的返回值都是string类型
  • typeof 后的数据类型有object number string function boolean
typeof [1,2]// object
typeof 123 // number
typeof null// object (早期null作为对象的占位符,历史遗留问题)
typeof undefined // undefined
typeof '123'// string
typeof function(){} // function
typeof true // boolean
复制代码

未定义一个变量a会报not a defined ,但是typeof 一个未定义的变量不会报错,会返回undefined

a是一个未声明的变量
typeof a // undefined

typeof(typeof a)// string 

复制代码

原始数据类型显式转换之Number();

  • 语法: Number(a);
  • 此方法会把所有的原始数据类型中看着像是数的值变成number类型,NaN也是属于number类型
Number(123) // 123;
Number(null) // 0;
Number(undefined) // NaN;
Number('123') // 123;
Number([1,2]) // NaN
Number(true) // 1
Number('123ass')// NaN
复制代码

原始数据类型显式转换之parsetInt();

  • 语法: parseInt(a);
  • 此方法是将其他数据类型的转换成number数据类型的整型,也就是有理数
  • 不管是什么类型的数据,必须从数字开始,否则一律返回NaN.截止到非数字位(砍断原则)
parsetInt(123.78) // 123
parseInt('123aaa')// 123
parseInt("aaa")// NaN
parseInt(null)// NaN
parseInt('1a')// 1
parseInt('a1a')//NaN
parseInt(undefined)//NaN
parseInt(true)// NaN
复制代码

==未解决问题==:

parseInt([1,2])// 1
parseInt({1:'damao'})//NaN
复制代码
  • 用法二:将目标进制的数转换为十进制的数
var a = 101010;
parseInt(a,2);

第二位参数是目标进制
复制代码

原始数据类型显式转换之parseFloat()

  • 语法: parseFloat();
  • 用法:必须以数字开头,第一个小数点不中断,当遇到非数字的时候中断;
parseFloat(123.3456)// 123.3456
parseFloat(null)// NaN
parseFloat(undefined)//NaN
parseFloat(123.aa123)// 123
parseFloat(true)// NaN
parseFloat([12,23])// 12
复制代码

原始数据类型显式转换之String();

  • 语法:String(a);
  • 用法:
String(123); // '123'
String(undefined);// 'undefined'
String(null);// 'null' 
String(NaN); // 'NaN'
String(true);// 'true'
String([1,2]); // '1,2'
复制代码

原始数据类型显式转换之Boolean();

  • 语法:Boolean();
  • 用法:除去 null undefined 空串 0 false NaN 这六种之外,其余的都为true

==显式转换方法之toString()==;未完成

  • 语法:a.toString();
  • 用法一:将原始数据类型转变成string类型,但是null和undefined会报错。
  • 用法二:将10进制的数转变成目标进制的数据
var a = 15;
var b = a.toString(16);
console.log(typeof b);
复制代码

原始数据类型隐式转换方法之isNaN();

  • 隐式转换是不明确的告诉进行转换了,但实际上是进行转换了
  • NaN和任何值都不相等,包括它自身 NaN === NaN // false
  • isNaN是判断一个数是否是NaN的方法,它的原理是先利用Number()转换为number类型,在进行判断。
isNaN([1,3])// false
复制代码

原始数据类型隐式转换之 ++ / --

  • ++ / -- 在隐式转换中也是先调用Number(),然后对转换成number的类型结果在进行++或者--
var a = '123';
a ++ // 124
var b = '12a';
b++ // NaN
复制代码

原始数据类型隐式转换之 * 或者 /

同样也是需要先变成number类型

原始数据类型隐式转换之 正负号

同样也是需要先变成number类型

原始数据类型隐式转换之逻辑运算符 && || !

  • 返回值是true或者false
  • && 用法:第一个表达式是true,返回第二个表达式。第一个表达式是false,则返回第一个表达式。
  • || 用法:第一个表达式是false,返回第二个表达式。第一个表达式是true,返回第一个表达式。

原始数据类型隐式转换之大于小于号 > <

  • 返回值是true或者false
  • 两边都是字符串的时候比较的是asc码
  • NaN比较任何类型的数都是false
  • 两边都是boolean,则转换成数字再返回
2>3<1  //  true
复制代码

特殊的+号

  • 规则:当两边有string类型时,都转换成string类型,变成字符串
  • 规则2:当两边不是string类型时,变成number类型
  • 减号不同的是 - 会转换成number,比如 123 - '12' = 111 {number 类型};
123 + 123 //  246;
123 + "123"//  '123123'
123 + null //123
123 + undefined // NaN
123 - undefined // 
复制代码

零碎的小知识

  • null == undefined // true
  • JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
评论