以下内容是个人学习笔记(暂未涉及ES6内容),如果有什么不对的地方希望大佬们能够帮忙指出进而有所改进.
JS是可以进行数据类型转换的,但是在进行数据转换时应该要先知道需要转换的数据原本是什么类型.判断数据类型有很多种方法,目前学习到的是: typeof value
typeof 方法进行数据的判断时得到的结果是相应的类型的字符串.
//typeof方法数据类型判断的结果
typeof 12123; // "number"
typeof "你好世界"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof {x:123,y:"大好河山"}; // "object"
//特殊
typeof [12,34,54]; //"object"
typeof null; // "object"
typeof function(){}; //"function
console.log(typeof 124); //打印结果为number
typeof数据类型判断总结:
1.数字判断时返回"number" 字符串判断时返回"string" undefined判断时返回"undefined" 布尔值判断时返回"boolean" 对象判断时返回"object" 数组判断时返回"object" null判断时返回"object" 函数判断时返回"function"
2.typeof方法判断数据的类型时可以将函数单独列了出来,但是缺点是无法区分:对象,数组和null
数字类型转换
1.Number(value)方法
将其他类型转换为数字:
(1)布尔值 true返回1,false返回0
(2)空值--null返回0 (3)未定义 undefined返回NaN
(4)对象转换为数字皆为NaN,包含空对象.
(5)数组 空数组转换为数字时结果为0,如果数组内只包含一个值,并且该值是纯数字则返回这个值,其他情况皆返回NaN
(6)字符串转换为数字,如果该字符串是完全符合数字格式(包含十六进制0x)则返回相应的数字(十六进制会转换为十进制),相反则返回NaN 注意:*空字符串返回值为0
2.parseInt(value) 和parseFloat(value方法
parseInt(value)是针对字符串转为整数的函数,该函数可以将不完全是纯数字的字符串进行数字转换,转换的规则是:从非空字符开始解析,直到解析到非数字时停止解析,如果非数字前含有数字返回非数字前数值,如果非数字前没有数字返回NaN; 注意:空字符串返回值为NaN;在该函数中可以也可以传2个参数parseInt(String,radix)其中radix是用来设置String的基数的(默认值为10,范围是2-36,如果不在范围内parseInt返回的值将是NaN),有人将radix值理解为string的进制,个人认为是可以的
parseFloat(value):与parseInt()函数的基本一致,唯一的不同是该方法可以解析小数,在遇到第一个小数点时会继续向后解析,直到遇到非数字(此时包含小数点)停止解析返回非数字前数值.
注意: 除数字外,空数组使用该函数返回值为NaN,但是如果数组不是空数组此时会先将数组换为字符串再进行字符串转数字;其他类型使用该函数返回的值都为NaN.个人认为使用parseInt(),parseFloat()函数转除字符串以外类型的值,是不规范的
字符类型转换
从计算机底层来说万物皆对象,也就是说几乎每个值都有toString()方法,可能调用的方法不同
1.value.toString() 方法
(1)数字转换为字符串 不能直接用数字本身调用toString()方法,需要将数字存在一个变量内,然后用变量.toString()实现转换
123.toString(); //报错 Invalid or unexpected token 无效或意外的标记(百度翻译)
var a=123;
console.log(typeof a.toString()+":"+a.toString()); // string:123
(2)数组转换为字符串 只需要将值一个个拆分,如:[值1,值2,值3].toString(),将数组拆分为值1,值2,值3=>再将其分别转换为字符串1,字符串2,字符串3并用英文逗号将几个字符串连接起来,然后将[变为",]变为" 如果是嵌套数组,先将数组内的小数组转换为字符串,然后再转换大数组的值
var a=[123,"你好世界",3435,6788];
console.log(a.toString()); //123,你好世界,3435,6788
var b=["hello",["world",2019]];
console.log(b.toString()); //hello,world,2019
(3)函数转换为字符串 默认情况下直接返回函数的完整代码
function fn(){};
console.log(fn.toString());//function fn(){}
console.log(typeof fn.toString()); //string
(4)对象转换为字符串 默认情况下返回的结果皆为[object Object] 注意:第一个o小写,第二个O大写
var o={};
console.log(o.toString()); //[object Object]
var o1={x:123,y:234};
console.log(o1.toString()); //[object Object]
console.log(typeof o1.toString()); //string
(5)布尔值转换为字符串 返回相应的字符串
false.toString(); //"false"
true.toString(); //"true"
(6)undefined,null转换为字符串 undefined,null没有toString()方法,可以通过String()函数转换
undefined.toString();
//报错 Cannot read property 'toString' of undefined 无法读取未定义的属性“toString”
null.toString();
//报错 Cannot read property 'toString' of null 无法读取空值的属性“toString”
(7)进制转换 (扩充)
//value.toString(进制值);
var a=2;
console.log(a.toString(2));//10
2.String(value) 方法
(1)常量可以用String()函数直接转换为字符串
String(123); //"123"
(2)undefined null 可以通过String()函数转换为字符串
String(undefined); //"undefined"
String(null); //"null"
(3)数组也可以用String()函数
var a=[123,"你好世界",3435,6788];
console.log(String(a)); //123,你好世界,3435,6788
3.隐式转换 加法拼接 value +""
// 任何值和字符串做加法,都会将其转换为字符串,而后做拼接
//实际上也是调用String()函数,进行转换的
var a=123;
console.log(typeof a); //number
a=a+"";
console.log(typeof a); //string
var b=null;
console.log(typeof b); //object
b=b+"";
console.log(typeof b); //string
var c;
console.log(typeof c);//undefined
c=c+"";
console.log(typeof c); //string
var d=[123,243,[232,"你好世界"],{x:11,y:23}];
console.log(typeof d); //object
d=d+"";
console.log(typeof d);
总结: (1) toString()方法只能作用在变量上,不能作用在常量上,String()函数可以直接将常量转换为字符串. (2) toString()方法无转换undefined和null,String()函数可以直接转换 (3)toString()方法可以进行进制转换,而String()函数不行 (4)隐式转换使用时比较便捷,但是可读性比较差
布尔值类型转换
1.Boolean(value)
(1)字符串转换 非空字符串转换结果为true 空字符串转换结果为false
(2)数字转换 非零非NaN数字值转换结果为true 零和NaN转换结果为false
(3)对象转换 任何对象转换结果都为true
(4)空值null转换 转换结果为false
(5)未定义undefined转换 转换结果为false
字符类型拓展
用的比较多的应该是" 和'
存在疑问及需补充?
1.函数和方法之间的区别? 未解决
网上得到的答案:
(1)函数(function)是一段代码,需要通过名字来进行调用。它能将一些数据(函数的参数)传递进去进行处理,然后返回一些数据(函数的返回值),也可以不返回数据。
(2)方法(method)是通过对象调用的javascript函数。也就是说,方法也是函数,只是比较特殊的函数。 当将函数和对象合写在一起时,函数(function)就变成了方法(method)。
暂时没有理解的是方法的特殊在于哪里?
2.数据类型判断种类,优缺点需补充? 未解决