2024-08-27 10:14:31 +08:00

166 lines
4.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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');