ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】

一.循环

(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:

n的阶乘

var n=5;
var num =1;
for(var i=1;i<=n;i++){
    num*=i;
}
consle.log(num);

示例3:

789颠倒

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:

打印100以内的质数(仅仅能被1和自己整处的数)

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:

黄金分割数列

1 1 2 3 5 8 13

/黄金分割数列
			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

转换后方法

  1. “undefined” ——未定义
  2. “boolean”——布尔值
  3. “string”——字符串
  4. “number”——数值
  5. “object”——对象或者null;
  6. “function”——函数

var num='abc';

document.write(typeof(- num)+ -num) number NaN

如果有+ -则为number

(2).alert()

 

 

undefind

 

reference

(3).isNaN()

null

undefind

var a

a

a'

TRUE

FALSE

String()

Date()

FALSE

TRUE

TRUE

ReferenceError

TRUE

FALSE

FALSE

false

true

所有isNaN()先判断括号内number()出来的值

 三.显示及隐式类型转换

(1).显示类型转换

Number()

null

''|| ' '|| []

undefind

var a

a

a'

1A'

TRUE

false

String()

0

0

NaN

NaN

ReferenceError

NaN

NaN

1

0

0

parseInt()

null

undefind

var a

a

a'

1A'

TRUE

FALSE

NaN

NaN

NaN

ReferenceError

NaN

1

NaN

NaN

无进制 3.14 就为3, 3.94也为3

第二个参数写进制

parseInt(a,16)

十六进制:0123456789abcdef

解析:

16进制   10进制

16      =     10

17      =     11

...              ....

?        =    20

那么10=16 那20=16*2呗=32  那么?=32 

往后同理 

33     =   21

...      =   ....

?(16*4+3) 43

推导公式:

L=十六进制数   S=十进制数

L=parseInt(S/10)*16+S%10

S=parseInt(L/16)*10+L%16

L=十六进制数   S=十进制数   X=变量 x=变量

X=S%10;

x=L%16

L=(S-X)/10*16+X

S=(L-X)/16*10+x

 

parseFloat()

var num=parseFloat("3.1495")

document.write(num.toFixed(2))

有四舍五入

String()

输入的是什么转换出来的就是什么

.toString()这里也可以填进制

undefind 与null不行没有.tostring

数组只有callObject原型的toString才能得到[object Array]

Boolean()

除去undefined null NaN  ''(中间没有字符 ) +0 -0  ducument.all() false外全是true

 ''中间有空格会为true

*0 /0会报错的

四.隐式转换

(1).隐式类型转换规则

  1. 转成string类型: +(字符串连接符)
  2. 转成number类型:++/--(自增自减运算符) + - * / %(算术运算符) > < >= <= == != === !=== (关系运算符)
  3. 转成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

较查询图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值