文章目录
一:数据类型用typeof()
number,string,object,function,undefined,boolean 注意有个bug是
typeof(null)的结果是object
注意:未经定义的变量会报错,但是使用typeof()的时候不会报错,会打印undefined
另外typeof(typeof(undefined))的结果为
这是因为typeof()返回的都是字符串类型的结果,比如"undefined","number"等
<script>
console.log(typeof(a));//undefined
console.log(typeof(undefined));//undefined
console.log(typeof(NaN));//number
console.log(typeof(null));//object
var a="123abc"
console.log(typeof(+a));//number
console.log(typeof(!!a));//boolean
console.log(typeof(a+""));//string
console.log(typeof(1=="1"));//boolean
console.log(typeof(NaN==NaN));//boolean
console.log(typeof(NaN==undefined));//boolean
console.log(typeof("11"+11));//string
console.log(typeof(1==="1"));//boolean
console.log(parseInt("123abc"));//123
var num=123123.3456789;
console.log(num.toFixed(3));//123123.346
console.log(typeof(typeof(a)));//string
</script>
二:Number将数据转换为number类型
转换不了的NaN
<script>
// var num=Number('123')
var num = Number(true)
var num = Number(null)
var num = Number(undefined)
console.log(typeof (num) + num);
</script>
三:parseInt转换为整型
<script>
// var demo="132ac";
var demo = "false"
var test = parseInt(demo);
console.log(typeof (test) + ":" + test);
</script>
四:其他类型转换
String,toString,Boolean,parseFloat
注意:null和undefined不能用toString,并且使用toString时,和其他类型转换方法不同 ,是demo.toString()
var demo = "abc";
var test = demo.toString();
五:隐式转换
1.isNaN
内部先Number(),再将结果与NaN比对,如果是NaN就返回true,不是则返回false
<script>
console.log(isNaN(123));
// console.log(Number('abc'));
console.log(isNaN('abc'));
// console.log(Number(null));//0
console.log(isNaN(null));//false
// console.log(Number(undefined))
console.log(isNaN(undefined));//true
</script>
2.++/–
内部先Number
<script>
var demo="123"
// demo++
demo--
console.log(demo);
</script>
3.正负±
内部Number,虽然有些转换不成数字,但是类型也会被强制转换为数字类型
<script>
var demo=+"abc"
console.log(typeof(demo)+":"+demo);
</script>
4.加号+
String() 只要有字符串+数字,都会转换为字符串
<script>
var demo=123+"abc"
console.log(typeof(demo)+":"+demo);
</script>
5.-*/%减乘除模
Number()
<script>
var demo=123/"abc"
console.log(typeof(demo)+":"+demo);
</script>
注意:字符串减字符串会转换为数字,乘除模亦是
6.控制台上测试null和undefined
7.唯一一个自己不等于自己的
六:不发生类型转换 ===
和`!==
`
发生类型转换容易出错,所以我们都用绝对等于和绝对不等于
七:例题
1.
<script>
var str=false+1;
document.write(str)//false不是字符串,false为0 0+1=1
var demo=false==1;
document.write(demo);//false
if(typeof(a)&&-true+(+undefined)+""){
//"undefined"&&-1+"NaN"+"" -1+NaN还是 NaN。空串是字符串,NaN+空串为字符串“NaN" 最后"undefined"和"NaN"都是字符串。&&上为真
document.write('基础扎实');
}
if(11+"11"*2==33){
document.write("基础扎实")
}
!!" "+!!""-!!false||document.write('不能打印')//双重否定,true+false-false=>1+0-0 1//document.write(),由于1为真,符号为或,所以到1为真就停了,不执行document.write了
</script>
2.
<script>
/*在js中将函数声明表达式转换为函数表达式,只需要在函数声明前面加上 +,-,=,~ 或 ! 等运算符或者()抱起来就行了。*/
/*“()”在js中有多种含义,在这里是作为强制运算符。
强制运算符内部必须是一个表达式,也就是说function test(){}会被认为是一个表达式,
就像匿名函数一样:function(){} 。
但是稍有不同,这是个带名字的匿名函数(Named function expression),
这个名字在外部是无法访问的,只能在函数内部访问,所以调用会报错。
最后提一点,javascript里小括号是没有作用域的。
*/
var x=1;
if(function f(){
}){
//if这个括号把function变成了表达式,立即执行了,结果是true,加到括号里去,f就找不到了,undefined
x+=typeof f;
}
console.log(x);
</script>