佳佳

97 阅读3分钟

*三目运算:简化了if(){}else if(){}else if(){}else 语法: 1、条件?操作1:默认操作;

	  2、条件1?操作1:条件2?操作2:默认操作;

	问题:1、只能简化简单的分支结构 - 三木操作也只能有一句话,不怕,其实以后你会发现很多if结果中操作恰巧只有一句话
	      2、默认操作是不能省略的 - 哪怕条件都不满足,至少还要做一件事``

&&短路:如果前一个条件为true,则后一个操作才执行 如果前一个条件为false,则后一个操作不执行 简化【简单的】分支:if(条件){操作} 语法:条件&&(操作); 举例:曾经:if(total>=500){total*=0.8} 现在:total>=500&&(total*=0.8); 特殊:1、【简单的】->操作只能有一句话 建议:简单的操作可用&&短路代替,但是操作如果复杂了还是建议使用if结构

		||短路:如果前一个条件为true,则后一个不看
			如果前一个条件为false,则后一个才看
			使用场景:两个值二选一 - 后期做浏览器的兼容性问题的
			e=e||window.event; - 见小案例,bom部分
                                                           

扩展:1、舍入误差:电脑很笨,计算能力某些情况很差,计算不清,js提供了一个方法:num.toFixed(n);//n代表保留的小数位数,根据你放入的小数位数自动四舍五入 //此方法有一个小缺陷:结果会变成一个字符串,建议搭配上parseFloat使用 计算机:很笨,但是很快,记忆力很棒(机械硬盘(永久保存)、固态硬盘(10年))

2、获取第一个字符的ascii码:
	var ascii=str.charCodeAt(0);

*1、【声明方式】创建函数: function 函数名(形参,...){ 函数体; return 返回值; }

   2、【直接量方式】创建函数:
	var 函数名=function(形参,...){
		函数体;
		return 返回值;
	}
	//通过此方法看出函数名其实就是一个变量名

***声明提前:- 鄙视时 在程序正式执行之前 将var声明的变量(轻)和function【声明的】函数(重) 都会悄悄的集中定义在当前作用域的顶部 但是赋值留在原地

 声明方式创建的函数会完整的提前(第一种)
 直接量方式创建的函数不会完整的提前,只有变量部分会提前(第二种)

 何时使用:永远不会自己使用,垃圾干扰我们的判断 - 只会在鄙视中遇到
	只要你遵守以下规则:
		1、变量名和函数名尽量不要重复
		2、先创建后使用
		3、如果鄙视时,遇到先使用后创建,多半都是在考你声明提前,先转换为我们认识的代码,再去判断

4、***按值传递:两个变量之间进行赋值 如果传递的是【原始类型】的值: 修改一个变量,另一个变量是不会受到影响的,其实是复制了一个副本给对方

	如果传递的是【引用类型】的对象:
		修改一个变量,另一个变量就会收到影响了,两者使用的是同一个地址值(浅拷贝) 
                    

isFinite(num):判断num是不是无穷大:true->有效数字 false->无穷大 哪些会为false:NaN、Infinity、分母为0

3、*牛逼的:parseInt/parseFloat/eval/isNaN 

*面试题:if vs switch 1、switch...case:缺点:必须要知道结果才能使用,不能做范围判断 优点:执行效率相对较高

	2if...else:缺点:执行效率相对较低
		      优点:能做范围判断

	建议:代码优化,尽量将的if...else 换成 switch...case 或 三目 或 短路