166 lines
4.4 KiB
JavaScript
166 lines
4.4 KiB
JavaScript
// 1. js 是动态语言,变量可以是任意类型
|
||
// var i = 1;
|
||
// i = "xiejie";
|
||
// console.log(i);
|
||
|
||
// 2. 在 js 中存在数据类型的转换
|
||
// var result = '4' - '3';
|
||
// console.log(result, typeof result);
|
||
|
||
|
||
// 3. 强制转换
|
||
|
||
// 3-1 Number() 可以将任意类型的值都转为 number 类型
|
||
// (1)简单值
|
||
// console.log(Number('')); // 0
|
||
// console.log(Number('123')); // 123
|
||
// console.log(Number('xiejie')); // NaN
|
||
// console.log(Number('123?')); // NaN
|
||
// // Number() 和 parseInt 就不一样
|
||
// // parseInt 是会尽可能的去多转换
|
||
// console.log('parseInt:::',parseInt('123xiejie')); // NaN
|
||
// console.log('parseInt:::',parseInt('xiejie123')); // NaN
|
||
// console.log(Number(true)); // 1
|
||
// console.log(Number(false)); // 0
|
||
|
||
// console.log(Number(undefined)); // NaN
|
||
// console.log(Number(null)); // 0
|
||
// console.log("parseInt::",parseInt(undefined)); // NaN
|
||
// console.log("parseInt::",parseInt(null)); // NaN
|
||
|
||
// (2) 对象的情况
|
||
// 第一步 valueOf 能得到简单值,调用 Number(),如果是对象,进入第二步
|
||
// 第二步 toString 能得到简单值,调用 Number(),如果仍然是对象,进入第三步
|
||
// 第三步 如果还是对象,就报错
|
||
|
||
// valueOf 和 toString 方法是任何对象或者值都有的,因为这两个方法是挂在 Object.prototype 上面的
|
||
// var obj= {
|
||
// name : 'xiejie'
|
||
// };
|
||
// console.log(obj.valueOf());
|
||
// console.log(obj.toString());
|
||
|
||
// console.log(Number(obj));
|
||
|
||
// 1. valueOf ----> { name: 'xiejie' }
|
||
// 2. toString ----> [object Object] ----> Number('[object Object]')
|
||
// 3. 最终得到 NaN
|
||
|
||
// var arr = [1,2,3];
|
||
// console.log(arr.valueOf());
|
||
// console.log(arr.toString());
|
||
// console.log(Number(arr));
|
||
|
||
// var arr2 = [5];
|
||
// console.log(arr2.valueOf());
|
||
// console.log(arr2.toString());
|
||
|
||
// 关于 valueOf 和 toString 其实是可以自己定义的
|
||
// console.log(Number({
|
||
// valueOf:function(){
|
||
// return 2;
|
||
// }
|
||
// }));
|
||
|
||
// var obj = {
|
||
// toString:function(){
|
||
// return 5;
|
||
// }
|
||
// }
|
||
// console.log(obj.valueOf());
|
||
|
||
// console.log(Number({
|
||
// toString:function(){
|
||
// return 5;
|
||
// }
|
||
// }));
|
||
|
||
// console.log(Number({
|
||
// valueOf: function () {
|
||
// return 2;
|
||
// },
|
||
// toString: function () {
|
||
// return 5;
|
||
// }
|
||
// }));
|
||
|
||
// console.log(Number({
|
||
// valueOf: function () {
|
||
// return {};
|
||
// },
|
||
// toString: function () {
|
||
// return {};
|
||
// }
|
||
// }));
|
||
|
||
// 3-2 String() 转换对象
|
||
|
||
// 1. toString() ---> 原始类型值 ---> String()
|
||
// 2. valueOf() ---> 原始类型的值 ----> String()
|
||
// 3. 报错
|
||
|
||
// var obj = {a : 1};
|
||
// console.log(obj.toString());
|
||
// console.log(obj.valueOf());
|
||
// console.log(String(obj)); // [object Object]
|
||
|
||
// var obj = {
|
||
// a : 1,
|
||
// toString(){
|
||
// return {}
|
||
// },
|
||
// }
|
||
// console.log(String(obj));
|
||
|
||
// 3-3 Boolean
|
||
|
||
// console.log(Boolean(''));
|
||
// console.log(Boolean(""));
|
||
// console.log(Boolean(``));
|
||
|
||
// 上面介绍的是强制转换,也就是我们开发人员手动进行转换
|
||
// 接下来要介绍的是自动转换,程序内部自动发生
|
||
|
||
// console.log('4' - '3');
|
||
// 这里等价于 Boolean('abc')
|
||
// if('abc'){
|
||
// console.log('Hello');
|
||
// }
|
||
|
||
// 快速转换为布尔值
|
||
// console.log(!!'abc'); // true
|
||
|
||
|
||
// console.log('5' + {}); // 5[object Object]
|
||
// 这里在做字符串的加法,那就变成了字符串的拼接
|
||
// 左边是字符串 OK
|
||
// 右边不是字符串,那么就需要调用 String() 转为字符串,所以 {} 就转为了 [object Object]
|
||
// 最后两个字符串拼接起来
|
||
|
||
// console.log('5' * []); // 0
|
||
|
||
// 首先这里是进行乘法操作,所以两边就都要转换为 number 类型
|
||
|
||
// 左边:Number('5') ----> 5
|
||
// 右边:[] 最终转换为了 0
|
||
// console.log([].valueOf()) // []
|
||
// [] 的 valueOf 拿到的仍然是 [],仍然是一个对象,接下来就要进行第二步
|
||
// 调用 toString 方法
|
||
// console.log([].toString()); // [] 得到的是一个空字符串
|
||
// 空字符串是原始值,因此可以使用 Number 转为数字
|
||
// console.log(Number('')); // 0
|
||
// 因此最终 [] 转换出来就为 0
|
||
|
||
// console.log('5' * [2]) // 10
|
||
// 右边:[2].valueOf()
|
||
// console.log([2].valueOf()); // [2]
|
||
// console.log([2].toString()); // 字符串的 2
|
||
// 最后 Number("2") 就变成了 2
|
||
|
||
// console.log("5" * [1,2]) // NaN
|
||
// console.log([1,2].valueOf()); // [ 1, 2 ] 仍然是数组
|
||
// console.log([1,2].toString()); // "1,2"
|
||
// console.log(Number("1,2")) // NaN
|
||
|
||
console.log(+'abc');
|