三、循环、引用值初识、显式及隐式类型转换
循环
for()循环:for(声明变量;判断语句;参数变化){}
for(var i = 0; i <= 10; i++){
//内容
}
//同样可以写成以下这样,变量声明可以提出来,参数变化放到for循环内部
var i = 0;
for(;i <= 10;){
//内容
i++;
}
for(var i = 0; 2; i++){
console.log(i)//无限循环
}
注:只要判断语句结果为true就执行循环,结果为false就跳出循序,0代表false,即跳出循环,其他数字代表ture
while()循环:while(条件){}
var i = 0;
for(;i <= 10;){
//内容
i++;
}//如果for这么书写就类似于
var i = 0;
while(i <= 10){
//内容
i++;
}
解决无限循环的方法:
- break
- 让条件变成false
do{}while()在实际开发中几乎用不到
引用值
object array function date RegExp
介绍:
数组:[ ],通过索引取值/赋值,.length可得到数组长度
对象:var person ={ 键值对 },通过.(点语法)来取值/赋值
typeof()
用法:typeof(x) 或者 typeof空格x
typeof
操作符返回一个字符串,表示未经计算的操作数的类型。
typeof 能返回:‘number’ ‘string’ ‘boolean’ ‘object’ ‘undefined’ ‘function’
返回’Object’(O大写)引用类型的情况有:
typeof([]);
typeof({});
typeof(null);//暂时记typeof(引用值)->返回Object引用类型
typeof(function(){}); //'function'
typeof(a);//a未声明返回'undefined'
typeof(typeof(a));//返回 'string'
typeof(typeof(typeof(a)));//返回 'string'
typeof嵌套只能返回'string'
//隐式类型转换
typeof(1 - '1'); //'number'
typeof('1'-'1'); //'number'
var num = '123';
typeof(num); //'string';
typeof(+num);typeof(-num); //number
console.log(typeof(-num) + ':' + -num); 'number:-123'
var letter = 'abc';
typeof(letter); // 'string'
typeof(+letter);//'number'
console.log(typeof(+letter) + ':' + +letter);//'number:NaN'
console.log(typeof(-letter) + ':' + -letter);//'number:NaN'
console.log(typeof(+letter) + ':' + letter);//'number:abc'
// 除 Function 外的所有构造函数的类型都是 'object'
var str = new String('String');
var num = new Number(100);
typeof str; // 返回 'object'
typeof num; // 返回 'object'
var func = new Function();
typeof func; // 返回 'function'
显式类型转换
Number(x) 把整个参数看做一个整体转换成数字,否则返回NaN
Number('1') //1
Number('a12');//NaN
Number('12a');//NaN
Number(true) //1
Number(false) //0
Number(null) //0
Number(undefined) //NaN
Number('true') //NaN
typeof(NaN) //'number'
typeof(Number('true')) 'number'
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数, radix
是2-36之间的整数,表示被解析字符串的基数。返回值:从给定的字符串中解析出一个整数,或者NaN。
-
string
要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用
ToString
抽象操作)。字符串开头的空白符将会被忽略。 -
radix
可选从
2
到36
,表示字符串的基数。例如指定 16 表示被解析值是十六进制数。请注意,10不是默认值!
parseInt(3.14); //3
parseInt('3.14'); //3
parseInt('3.14abc');//3
parseInt('abc123');//NaN
parseInt(true);parseInt(false);parseInt(null);parseInt(undefined);parseInt(NaN); //NaN
var b = 16;
parseInt(b, 16)//22,把b当做16进制数,再转化成10进制数返回
parseFloat()
函数解析一个参数(必要时先转换为字符串)并返回一个浮点数。
parseFloat('3.9415926'); //3.9415926
parseFloat(3.9415926); //3.9415926
var num = parseFloat('3.9455926');
console.log(num.toFixed(2)); //3.95,toFixed四舍五入保留x位小数
toString()
方法返回指定对象的字符串形式。
var str = '3.14';
str.toString(); // '3.14'
undefined.toString();//错误
null.toString();//错误
//toString(x)把数字转换成x进制数的字符串
var number = 16;
number.toString(16); // '10'
Boolean(x) 中为假的有:
undefined null NaN ‘’ 0 false 六大假货,这些返回false,其他返回true
隐式类型转换
var a = '123';
a++; //str隐式转换成Number
console.log(a); //数字124
var a = "a"+1; //'a1'
var a = '3' * 2; //6, *,/,-,% str隐式转换成Number
// 有比较运算符存在,str会转换成number,Number(x)若转化不了则返回NaN
var a = '1' > 2; // false
console.log(a);
var a = '1' < 2; //true
var a = '1' >= 1; //true
var a = 1 == '1';console.log(a); //true
var a = 1 != '2';console.log(a); //true
//两个字符比较转换成ASCII,从左至右一个字符一个字符比较,有胜负则出结果
var a = 'a' > 'b';console.log(a); //false
var a = 'a' < 'b';console.log(a); //true
var a = 'ba' > 'b';console.log(a); //ture
var a = NaN == NaN //false
//比较运算符得出的结果是布尔值,boolean会转换Number,false->0,true->1
var a = 2 > 1 >3;console.log(a); //false
var a = 2 > 1 == 1;console.log(a); //true
注意:这个不会进行隐式类型转换因为全等运算符已经需要去判断全等号两边数据类型是否相等,就不会有隐式转换这一步。
var a = 1 === '1' //false这个不会进行隐式类型转换,因为全等运算符已经需要去判断全等号两边数据类型是否相等,就不会有隐式转换这一步。
var a = undefined > 0; //false
var a = undefined < 0; //false
var a = undefined == 0; //false
console.log(a);
var a = null > 0; //false
var a = null < 0; //false
var a = null == 0; //false
console.log(a);
isNaN() 判断是不是NaN,参数首先经过Number(x)隐式转换再用isNaN判断。
Number(x)判断,如果x整体不是数字则返回NaN。
isNaN(NaN); //true
isNaN(123); //false
isNaN('123'); //false
isNaN('a'); //true
isNaN(null); //false
isNaN(undefined); //true