类型转换
显示类型转换
javascript的数据类型包括:
(1)基本数据类型:number、string、boolean、null、undefined
(2)对象:object
object又包括Function、Array、Date、ExgReg等
javascript的隐式类型转换,是相对于显示类型转换来说的。
明确的将某种类型转换成另一种类型称为显示转换,相反则称为隐式类型转换。
显示类型转换的方法Number()、Boolean()、String()、toString() 等
隐式类型转换包括运算、语句等
学习文章:javascript 隐式类型转换
Number是整体转换–能够把一个看起来像数字的字符串转成数字–尽量去转换能转的都转了
var a = "+100";
console.log( a+100 ); // "+100100"
console.log(Number(a)); // 100
var a1 = "";
console.log( Number(a1) ); // 0
var a2 = true;
console.log( Number(a2) ); //true -> 1 false -> 0
var a3 = []; //[""] [123] ["123"] [1,2,3]
console.log( Number(a3) ); // 0 0 123 123 NaN
var a4 = null;
console.log( Number(a4) ); // 0
parseInt从左到右一个一个转换,碰到非数字的东西就不转了 只能转像->字符串 前面符号/空格也是认的
var b = "100px"; // "-100" "00100" "10.6"
console.log( parseInt(b) ); // 100 -100 100 10
console.log( parseInt(b,10) ); // b,10 是按进制转换--默认是10进制
parseFloat可以转换小数
var c = "12.34元"; // "12.3.4"
console.log( parseFloat(c) ); // 12.34 12.3
tips:
- 所有类型的值与字符串的值相加都会被转换成字符串
- a++是先执行语句,再自增,++a是先自增再执行语句
- 字符串的比较大小,比较的是asc码
- var a = NaN = NaN ;document.write(a);a为false,NaN不等于任何,包括自己、
- undefined,null,NaN,"",0,false ==>这些值转换为布尔值都是false,其他的值为true
- !是把表达式变成布尔值再取反,!!是把表达式变成布尔值,!!0 = false
- typeof() {},[],null,都会返回object,undefined会返回’undefined’,NaN返回number,typeof(typeof(a)) --> String
- 显示类型转换 Number() 布尔值会返回1 0,null的返回值是0,undefined是NaN
- parseInt()解析时会从从左向右解析,从数字类开始看,看到非数字类截止‘256px’返回256
- String()不论传什么都会转换成字符串 包括undefined,但是undefined和null没有toString方法
- 隐式类型转换 isNaN() 相当于 Number(‘abc’) 拿Number转换的结果再和NaN作比较
练习
1、计算2的n次幂,n可输入,n为自然数
var n = parseInt(window.prompt('input'))
var mul = 1;
for(var i = 0;i < n;i++){
// mul = mul * 2
mul *= 2;
}
console.log(mul)
2、计算n的阶乘
var n = parseInt(window.prompt('input'))
var mul = 1;
for(var i = 1;i<=n;i++){
//mul = mul * i
mul *= i;
}
console.log(mul)
3、著名的斐波那契数列
// 1 1 2 3 5 8 13
var n = parseInt(window.prompt('input'))
var first = 1,
second = 1,
third;
//前两位固定是1
if (n <= 2) {
document.write('1')
}else{
for(var i = 0;i < n - 2;i++){
third = first + second;
first = second;
second = third;
}
document.write(third)
}
4、打印1到100之间的质数
var count = 0;
//拿出1到100的数
for(var i = 1;i <= 100 ;i++){
// 让这个数除以1到自身的所有的数
for(var j =1 ; j <= i ;j++){
if(i % j == 0){
count ++
}
}
// 如果只有1和自己能被整除,那么他是质数
if (count == 2) {
document.write(i + " ")
}
count = 0;
}
var count = 0;
//拿出1到100的数
for(var i = 2;i <= 100 ;i++){
// Math.sqrt(i) 求一个数的平方数 如100 = 10 * 10,如果在10以下没有可以让他整除的数,那么10以上也不会有
for(var j =1 ; j <= Math.sqrt(i) ;j++){
if(i % j == 0){
count ++
}
}
// 如果只有1能除
if (count == 1) {
document.write(i + " ")
}
count = 0;
}
var str = false + 1; //隐式类型转换 false>>0
console.log(str) // 1
var demo = false ==1; //demo = false
console.log(demo)
if (typeof(a)&&-true + (+undefined) + "") { // typeof(a) >> "undefined" -true >> 1 +undefined >> NaN 前面是"undefined" 后面是"NaN" 所以if里是true
console.log('基础好')
}
if (11 + '11' * 2 == 33) { // 11 + 22 == 33 *有隐式类型转换 会被转换成22
console.log('基础好')
}
!!" " + !!"" - !!false || console.log('哈哈哈') //true + false -false 1 + 0 - 0