ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】
程序员文章站
2024-03-18 11:26:34
...
一.循环
(1).特殊书写方式
var i = 1;
for(;i;){
console.log(i);
i++;
if(i==11){
i=0;
}
}
循环时只去判断i等于true(1)时才循环为0是不循环的
示例1:
var i=100;
for(;i--;){
consle.log(i);
}
示例2:
var n=5;
var num =1;
for(var i=1;i<=n;i++){
num*=i;
}
consle.log(num);
示例3:
var num =789;
var a=num%10;
var b=(num-a)%100/10;
var c=(num-a-b*10)/100
示例4:
var a=1;
var b=2;
var c=3;
if(a>b){
if(a>c){
console.log(a);
}else{
conlse.log(c);
}
}else{
if(b>c){
console.log(b);
}else{
console.log(c);
}
}
示例5:
var c=0;
for(var i=2;i<=100;i++){
for(var j=1;j<=i;j++){
if(j%i==0){
c++;
}
}
if(c==2){
console.log(i);
c=0;
}
}
实例6:
/黄金分割数列
var a1= parseInt(window.prompt("请输入n位"));
var a=1,
b=1,
c=0;
if(a1<=2){
document.write(1);
}else{
for(var i=2;i<a1;i++){
c=a+b;
a=b;
b=c;
}
document.write(c);
}
二.引用值初始
(1).typeof()
null |
undefind |
var a |
a |
typeof(typeof()) |
/+ |
转换方法 |
object(bug) |
undefind |
undefind |
undefind |
String |
SyntaxError |
转换后方法 |
- “undefined” ——未定义
- “boolean”——布尔值
- “string”——字符串
- “number”——数值
- “object”——对象或者null;
- “function”——函数
var num='abc';
document.write(typeof(- num)+ -num) number NaN
(2).alert()
(3).isNaN()
null |
undefind |
var a |
a |
a' |
TRUE |
FALSE |
String() |
Date() |
FALSE |
TRUE |
TRUE |
ReferenceError |
TRUE |
FALSE |
FALSE |
false |
true |
三.显示及隐式类型转换
(1).显示类型转换
null |
''|| ' '|| [] |
undefind |
var a |
a |
a' |
1A' |
TRUE |
false |
String() |
0 |
0 |
NaN |
NaN |
ReferenceError |
NaN |
NaN |
1 |
0 |
0 |
null |
undefind |
var a |
a |
a' |
1A' |
TRUE |
FALSE |
NaN |
NaN |
NaN |
ReferenceError |
NaN |
1 |
NaN |
NaN |
document.write(num.toFixed(2))
数组只有callObject原型的toString才能得到[object Array]
除去undefined null NaN ''(中间没有字符 ) +0 -0 ducument.all() false外全是true
四.隐式转换
(1).隐式类型转换规则
- 转成string类型: +(字符串连接符)
- 转成number类型:++/--(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !=== (关系运算符)
- 转成boolean类型:!(逻辑非运算符)
(2).字符串连接符与算术运算符隐式转换规则混淆
console.log(1+'true');//1true
console.log(1+true)//2
console.log(1+undefined);//NaN
console.log(1+null)//1
原理分析
(3).会把其他数据类型转换成number之后再比较关系
console.log("2">10);//false
console.log("2">"10");//true
console.log("abc">"b");//false
console.log("abc">"aad")//true
console.log(NaN==NaN)//false
console.log(undefined==null);//true
(4).复杂数据类型在隐式转换时会先转成String,然后再转成Number运算
var a=???;
if(a==1&&a==2&&a==3){
console.log(1);
}//如何完善???使其打印1
(5).逻辑非隐式转换与关系运算符隐式转换搞混淆
空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串`[object Object]` (注意第一个小写o,第二个大写O哟)
//大坑
console.log([]==0);//true
console.log(![]==0);//true
//神坑
console.log(![]==[])//true
console.log([]==[])//false
//陨石坑
console.log(!{}=={})//false
console.log({}=={})//false
var a ='123'; a++; //Number(a)
var a='a'+1; //String(1)
var a='3'*2; // + - * / ->number
var a=1>'2' //number
var a= 'a'>'b' //ascii
var a= 1==='1' //不进行转换
0 == ''; //true
0 == ' '; //true
!!'' =false
!!' '=true
[] == false; // true
[] == ![]; // true
var a = 2>1>3
var a=2>1==1;
(拆解步骤:先比较2>1为true转换为1)
var a=undefined==0; false
var a=null==0; false
var a= null==undefind
var a= NaN==NaN false
上一篇: java实现环形队列
下一篇: 扫雷小游戏