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

二.引用值初始

(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

 ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】_第1张图片

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

原理分析

 ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】_第2张图片

 

(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

 原理分析

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

(4).复杂数据类型在隐式转换时会先转成String,然后再转成Number运算

面试题

var a=???;
if(a==1&&a==2&&a==3){
    console.log(1);
}//如何完善???使其打印1

原理分析

 ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】_第4张图片

(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

 原理分析

 ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】_第5张图片

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

较查询图:

 ECMAScript-3 【循环-引用值初识-显示及隐式类型转换】_第6张图片

你可能感兴趣的:(ECMAScript,ecmascript)