javascript类型转换
转换为数字
Number();//转数字
//可以把任意值转换成数字,如果要转换的目标对象(一般是字符串)中有不是数字的值,则会返回 NaN。 Number('1') // 1 Number(true) // 1 Number('123s') // NaN Number({}) //NaN
Number(null);//在这里null可以转换为0
Number(undefined);//NaN
parseInt();//转整数
console.log(parseInt("10"));//10
console.log(parseInt("10afrswfdsf"));//10
console.log(parseInt("1fds0"));//1
console.log(parseInt("10.98"));//10
console.log(parseInt("10.98fdsfd"));//10
console.log(parseInt("g10"));//NaN
console.log(parseInt(null));//NaN
console.log(parseInt(undefined));//NaN
//一个得到NaN,一个得到前面的数值
console.log(parseInt('2',2));//NaN
console.log(parseInt('2',10));//2
parseFloat()//转小数
console.log(parseFloat("10"));//10 console.log(parseFloat("10afrswfdsf"));//10 console.log(parseFloat("g10"));//NaN console.log(parseFloat("1fds0"));//1 console.log(parseFloat("10.98"));//10.98 console.log(parseFloat("10.98fdsfd"));//10.98 console.log(parseFloat("2.4.6.8"));//2.4 console.log(parseFloat(null));//NaN console.log(parseFloat(undefined));//NaN
//总结:想要转整数用parseInt(),想要转小数用parseFloat()
//想要转数字:Number();要比上面的两种方式严格
转换为字符串
需要注意的是:null、undefined 没有.toString()
方法。
.toString()方法
// Object.prototype.toSring() 返回一个表示该对象的字符串。 /* 每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。 默认情况下,toString() 方法被每个 Object 对象继承。 如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中 type 是对象的类型。 */ let obj={a:'zhangsan', b:14}; console.log(obj.toString());//[object object] let obj2=undefined; console.log(obj2.toString()); // Array.prototype.toSring() let arr=[1,2,3,4,5]; console.log(arr.toString());//1,2,3,4,5 console.log([].toString());//'' // Function.prototype.toSring() function ceshi(){ console.log('aaa'); return "张三"; } console.log(ceshi.toString); // Number.prototype.toSring() let num=Number('123'); console.log(num.toString());//'123' // String.prototype.toSring() // 字符串对象的 toString() 方法返回一个字符串,表示指定的字符串。 const stringObj = new String('foo'); console.log(stringObj);// expected output: String { "foo" } console.log(stringObj.toString());// expected output: "foo" /*String 对象覆盖了 Object 对象的 toString() 方法; 并没有继承 Object.prototype.toString()。 对于 String 对象,toString() 方法返回一个字符串来表示这个对象,和 String.prototype.valueOf() 方法的返回值相同。 */ let str='张三丰'; console.log(str instanceof String); console.log(str.toString()); //Boolean.prototype.toString() console.log(typeof true);//boolean console.log(true.toString());//true console.log(typeof true.toString());//true //Symbol.prototype.toString() //Date.prototype.toString() //URL.toString() //Location.toString() // Selection.toString() // Range.toString() // Error.prototype.toString() // TrustedHTML.toString() // TrustedScript.toString() // URLSearchParams.toString() // CSSTransformComponent.toString() // WorkerLocation.toString() // HTMLAreaElement.toString() // HTMLAnchorElement.toString() // RegExp.prototype.toString() //BigInt.prototype.toString() // TypedArray.prototype.toString()
//2 String();
//
// var num1=20;
// console.log(String(num1));
//如果变量有意义调用.toString()使用转换
//如果变量没有意义使用String()转换
// var num2;
// console.log(num2.toString());
// var num3=null;
// console.log(num3.toString());
//这个可以
// var num2;
// console.log(String(num2));
// var num3=null;
// console.log(String(num3));
转换为布尔类型
//1 Boolean(值);
// console.log(Boolean(1));//true // console.log(Boolean(0));//false // console.log(Boolean(11));//true // console.log(Boolean(-10));//true // console.log(Boolean("哈哈"));//true // console.log(Boolean(""));//false // console.log(Boolean(null));//false // console.log(Boolean(undefined));//false
//非(!)运算符
var a;// undefined !a // true !!'hello' // true !123 // false !null // true
// var str=10;
// console.log(+str);
隐式类型转换
let str='123'; console.log(typeof -str); console.log(-str);//-123(Number) console.log(str+1);//1231(String) console.log(+str+1);//124(Number) let res=str-1; console.log(res);//122(Number)
对象转换
对象直接参与计算时,系统会根据计算的场景在 string/number/default
间转换。
- 如果声明需要字符串类型,调用顺序为
toString > valueOf
- 如果场景需要数值类型,调用顺序为
valueOf > toString
- 声明不确定时使用
default
,大部分对象的default
会当数值使用