显隐式类型转换

显隐式类型转换

typeof题:
typeof [];  => object => 可以理解为引用,但不完全是引用
typeof null; => object => 为什么是obj? 其实是个bug;null实际上是空对象的指针,/空对象的占位符。它一开始的规定是引用类型,所以是object。es6曾提案说修改成null类型,但被拒绝了,因为更改已有代码代价很大。
typeof undefined  => undefined。
typeof( function(){} )  => function。
typeof(1 - 1)  => number。
typeof(1- "1")  => number, 隐式类型转换。
typeof "1" - "1"  =>  number。
直接打印typeof a; => undefined。
直接打印console.log(a)  => 报错, referenceError。
typeof typof a;   =>  string。
				
显示类型转换规则:

Number转换题:
特殊
Number(true);   =>  1,    number。
Number( null )  =>  0 。
其他
Number('123');  =>  123, number。
Number('true')  =>  NaN,  number。
Number( undefined )  =>  NaN。
Number('a')       =>  NaN。
Number('1a')      =>  NaN。
(Number除了字符串数字, null和true以外,其他都转换成NaN)。

parseInt转换题:
parseInt('123')   => 123, number  。
parseInt('233abc123') => 233, 前面有数字就转换,忽略后面不是数字的部分     。
parseInt(true)    => NaN, 为什么?指向转换成整形,数字到整形。
parseInt('false') => NaN。
parseInt(null)    => NaN。
parseInt(undefined)    => NaN。
parseInt(NaN)    => NaN。
(parseInt只有数字才转换,前面有数字也转换, 其他的变成NaN)。
parseInt(数字, radix'基底'16 ) => 基底16表示以多少进制转换成十进制,取值2-36进制。

parseFloat转换题:
parseFloat('3.14');   => 3.14。
保留几位.toFixed(2 几位);   => 四舍五入。

字符串转换:
(有数字参与比较的时候,会转换成数字再比较)。
var a = '123'; a++; 打印a;  ->  124, 隐式类型转换。
String(123);    => '123'。
console.log(123 + '');  转换成字符串。
.toString()   =>  调用toString()方法,转字符串。
.toString(radix目标进制)    => 以十进制为基础,转换成目标进制。
(parseInt(100, 2).toString(16); 解释一下意思)。

Boolean转换:
Boolean(1);      => true。
Boolean(null);   => false。
(Boolean的参数是6个假的时候,为false,其他为true)。

隐式类型转换规则(偷偷转):

隐式类型转换的符号:> < >= <= == 
不转换的符号:	=== 不转换  

> 比较:
'1' > 2   -> false, 先转换成数字再进行比较。
1 > '2'   -> false 。
(两边字符串比较的时候,逐位比较Ascii码)。
'a' > 'b'  -> false。
'4.5' > '11' --> true --> 4跟1对比,有结果就结束。
'1.5' > '11' --> false --> 1跟1对比,.跟1对比,转换成ascii后比1小。
2 > 1 > 3   -> false, true > 3,比较1和3。

== 比较:
NaN == NaN ? --> false --> NaN不等于包括自己在内的任何东西。
2 > 1 == 1  -> true。
        
undefined比较:既不等于0,不大于0,也不小于0。
undefined > 0 ->false。
undefined < 0 ->false。
undefined ==0 ->false。
+undefined  -> NaN。
undefined == null ->true。 但undefined与null相等,他俩都跟0没关系,所以干脆就让他门相等了。
undefined === null ->false。

null比较:不等0,不大0,不小0。
null > 0 ->false。
null < 0 ->false。
null ==0 ->false。
+null       -> null。      

(+a / -a)比较:
 var a = '123'; +a; 求typeof +a -> number,123,  +a或-a,的结果是转换成number类型。
typeof -a; ->number, -123。
+true       -> 1。
+false      -> 0。

typeof比较:
typeof -a; ->number, -123。

isNaN比较:
背下来(isNaN用的是Number类型转换,所以null和true,false特殊)。
isNaN(NaN) ->true。
isNaN('123') -> false, 隐式类型转换成数字了。
isNaN('a')   -> true, a转换成成NaN。
isNaN(null) -> false, 转换成0了,false。
				
为假的6个值,其他都为真:undefined, null, "", 0, false, NaN。

if的为假的情况:undefined, null, '', 0, false, NaN为假。其余的全部为真。

object与Object对比:
object => 具体的对象:Object => 代表引用类型,object,array等
	
两类错误及各自特点:语法错误通篇不执行。通用错误之后的语句不执行。

字符串比较:
'str' + null --> 'strnull'。
'str' + undefined --> 'strundefined'。
'str' + true --> 'strtrue'。
'str' + NaN  --> 'strNaN'。
(任何数据类型+字符串,都是字符串)。
(控制台,变量是蓝色,字符串是灰黑色)。

NaN, Infinity。
0 / 0 --> NaN --> 非数的意思。
(NaN 是 number类型)。
1 / 0 --> Infinity 正无穷。
-1 / 0 --> Infinity 负无穷。
(Infinity 是 number类型)。

++ --
var a = 1;
console.log(a++) // 1先输出,再++,叫后++。
console.log(++a) // 3 先++再输出,叫前++。
console.log(a = a + 1 );  // 4先运算,接着赋值,再输出

var a = 5, b;
b = a++ +1;  //a++ 是在算式的最后才运算的
console.log(a, b); //6,6 //b = a + 1; 然后a++; 相当于b=1 + a++;。

var a = 5, b;
b = ++a +1;  
console.log(a, b); //6, 7

var a = 5, b;
b = a-- + --a;
console.log(a, b); //3, 8  //a--的--是放在整个算式赋值后才运行的。
(相当于 b = --a + a--, 所以结果是 a = 3, b = 4+4 =8)。
var a = 5, b;
b = --a + --a; 
console.log(a, b); //3, 7

==
1 == '1'  //true  //相等是不看类型的。
1 === '1' //false //全等类型也要相等。
NaN == NaN //false //NaN不等于包括它自己的任何东西。
a = !a; //把非a赋值给a。
a != a; //a不等于a。false

逻辑运算符规则:|| 假就往后走,遇到真就返回真的值。都为假就返回最后值。&& 真就往后走,假就返回假的值。都为真就返回最后一个值,

在开发中应用|| :给参数和变量赋默认值。
var name ='';
console.log(name || '未找到数据');

点击事件兼容写法:
btn.onclick = function(ev){
	var e = ev || window.event; //如果走后,则是IE低版本
	var tar = e.target || e.srcElement;
}
         
if和if else的使用场景:如果互斥条件要if else。不互斥可分开写。

if switch的使用场景:switch: 单条件,多个定值。if: 判断范围值 多条件时。

else if的使用场景:全部条件都互斥时,用else if。

判断条件的逻辑完整性:写代码要注意逻辑的完整性!!尽量将每个情况都考虑到。
 
js输入输出方法:输入:window.prompt('输入提示内容'),弹框输入。输出:console.log(''),控制台打印。document.write(''),文档输入,插入在body的最后。console.info()。

JS考题:

1. 解释var c = (a + b) * d; 的过程:1. 声明变量c。2. 括号运算a+b。3. *d。4. 计算结果赋值给c。
      

2. 打印1到100的数,()只有一句,{}里不能出现i++, i--:
	方法1:
	var i = 100;
	for(; i-- ;){
		console.log(i);
	}
	//打印0到100的数,()只有一句,{}里不能出现I++, i--
	
	方法2:
	var i = 1,
sum =100;
	for(; i ;){
		console.log(sum--);
		sum == 0 && i = 0;
	}
	
	方法3:
	var i = 100;
	for(; i-- ; ) {
		console.log(100 - i);
	}
      
3. 把789变成987编程题:
	方法1:
	var num = 789;
	var num2 = +(num + '').split('').reverse().join('');
	console.info(num2);
	
	方法2:
	var num = 789;
	var a = num % 10;
	var b = (num - a) % 10;
	var c = (num - a - b * 10) /100;
	console.log("" + a + b + c);
	
	方法3:
	var num = 789;
	var a3 = num % 10,
			a2 = (num - a3) % 100 / 10,
			a1 = (num - a3 - a2 * 10) % 1000 / 100;
	console.info('' + a1+ a2+ a3);

4. 打印100以内的质数
	//仅被1和自己整除的数
	for(var i = 2; i < 100; i++){ //从2开始,1不是质数
		var flag = 0;
		for(var j = 1; j <= i; j++){
			if(i % j == 0){
			  flag++;
      }
		}
		if(flag == 2){
			console.log(i);
		}
	}
	//思路,从2开始。外层循环范围,内层循环数量(从1循环到自身),判断flag标记仅为2时,判断是质数并输出。

5. 以下表达式a的值是?为什么?
var a = 1 && 2;
//2, 都为真就返回最后一个值,有假就返回假的值。逻辑运算符规则:|| 假就往后走,都为假就返回最后值,遇到真就返回真的值。&& 真就往后走,都为真就返回最后一个值,有假就返回假的值。

6. 只用a,b两个变量交换值:
a = a + b
b = a - b
a = a - b 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值