1.JS数据类型转换
显式数据类型转换
即通过一些特定API将数据类型直接转换
a. 转换为字符串:
API: toString( )
语法:数据.toString( )
返回值:字符串;
console.log( (123).toString() );//'123'
//切记数字是一个整体,要带括号,不带会报错
console.log( true.toString() );//'true'
console.log( (undefined).toString );//报错
console.log( (null).toString );//报错
console.log( (NaN).toString() );//'NaN'
console.log( ([1,2,3]).toString() );//'1,2,3'
console.log( ({a:123}).toString() );//'[object Object]'
//任何对象转都会是这个结果
console.log( (function(){}).toString() );//'function(){}'
//直接将函数作为字符串打印出来,包括函数体
API:String( )
语法:String( 数据 );
返回值:字符串
console.log( String(123) );//"123"
console.log( String(true) );//"true"
console.log( String(undefined) );//'undefined'
console.log( String(null) );//'null'
console.log( String(NaN) );//"NaN"
console.log( String([1,2,3]) );//"1,2,3"
console.log( String({}) );//"[object Object]"
console.log( String(function(a){}) );//function(a){}
//和toString()的区别是String()能将所有数据类型转换为字符串
b. 转换成数字
语法: Number( 数据)
语法:parseInt( 数据)
语法:parseFloat(数据)
console.log( Number('1234') );//1234
console.log( Number('123a') );//NaN
console.log( Number(true) );//1
console.log( Number(false) );//0
console.log( Number(null) );// 0
console.log( Number(undefined) );// NaN
console.log( Number(NaN) );// NaN
console.log( Number([]) );//0
console.log( Number({}) );//NaN
console.log( Number(function(){}) );//NaN
Number()只能转换纯数字构成的字符串,这点和parseInt()和parseFloat()不同。另外还能转换布尔值和空数组为数字,其余全部转换为NaN;
c. 转换为布尔值
语法:Boolean(数据)
console.log( Boolean(123) );//true
console.log( Boolean(0) );//false
console.log( Boolean('123') );//true
console.log( Boolean('') );//false
console.log( Boolean(' ') );//true
console.log( Boolean(null) );//false
console.log( Boolean(undefined) );//false
console.log( Boolean([]) );//true
console.log( Boolean({}) );//true
console.log( Boolean(function(){}) );//true
console.log( Boolean(NaN) );//false
console.log( Boolean('abc') );//true
console.log( Boolean('你好') );//true
总结:’'空字符串 null undefined NaN 0 false 这6个会转成false,其他所有值都是true
隐式数据类型转换
js是一种弱类型语言,在计算的时候自动进行数据类型的转换
“+”在js中有两种作用,数学运算或字符串拼接
console.log( 2 + 3 );// 5
//两边纯数字,进行数学运算
console.log( 2 + '3' );// '23'
//一边是字符串,进行字符串拼接
console.log( 3 + true );// 4
//一边是数字,一遍是布尔值,布尔值发生数据转换,再进行数学运算
console.log( 3 + null );// 3
//一边是数字,一边是null,null转换为0再进行数学运算
console.log( 3 + undefined );// NaN
//一边是数字,一边是undefined,计算结果为非数字
其他数学运算符
console.log( 7 - '2' );//5
//其他数学运算符,将两边转换为数字,转换失败得到结果为NaN
2.选择结构
if结构
if (判断条件/逻辑点){
// 如果条件判断为 true,则执行这里面的代码
}
switch结构
switch(a){
case 1:
console.log(111);
console.log('aaa');
break;//停止往后运行
case 2:
console.log(222);
console.log('bbb');
break;//停止往后运行
case 3:
console.log(333);
console.log('ccc');
break;//停止往后运行
default:
//其他情况
console.log(444);
console.log('ddd');
}
如果无break则会发生穿透效应,如果是case 1,那么后面的所有分支都会执行;
三目运算
条件1? 分支1:分支2;
条件1成立执行分支1,反之执行分支2;
true ? console.log(111) : console.log(222);
3.循环语句
for语句
for (表达式1;表达式2;表达式3){
// 循环体4
}
for (var i = 0; i < 5; i++){
console.log('hello world');
}
执行顺序第一次为1243,第二次为243,最后一次为2条件不通过,直接结束循环
while语句
while(判断条件){
console.log(11);//循环体
}
//例
var n = 1;
while(n < 5){
console.log(555);
n++;
}
do while 语句
do{
console.log(11111);
n++;
} while(n < 5);
在判断条件之前,无论满足不满足,都会执行一次do内代码;
4.函数
函数书写形式
1.函数表达式
var fn3 = function (){
console.log('函数表达式');
}
先声明再调用
2.函数声明
function fn4(){
console.log('函数声明');
}
既可以先声明,也可以先调用
3.匿名函数
不允许单独定义,常作为事件处理函数等回调函数
也可以作为匿名自执行函数,在函数内定义变量可以节省全局空间,防止变量冲突
btn.onclick = function (){// 匿名函数,事件处理函数
console.log(123);
}
;(function (){
console.log('匿名自执行函数');
})();//匿名自执行函数
函数返回值
函数默认返回值为undefined,只有return时也为undefined,函数会在执行完return结束函数执行;