ECMAscript - 核心语法2

124 阅读5分钟

[接上篇文章](url:ECMAscript - 核心语法 - 掘金 (juejin.cn))

扩展:

1、计算机很笨,牛逼在快和记忆力好:计算机带有舍入误差:解决:num.toFixed(d);//d代表保留的小数位数,会四舍五入自动进制
	缺陷:搭配上一个parseFloat使用最好,结果返回的是一个字符串

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

1、*****自定义Function:

什么是函数:需要先定义好,可以反复使用的一个代码段
   何时使用:1、不希望打开页面立刻执行 2、以后可以反复使用 3、希望绑定在页面元素之上
   如何使用:
1、创建并且调用:21、创建
	       *1、【声明方式】创建函数
		   function 函数名(形参,...){
			函数体;
			return 返回值/结果;
		   }

		2、【直接量方式】创建函数 - 无用
		   var 函数名=function(形参,...){
			函数体;
			return 返回值/结果;
		   }

	2、调用
		var 接住返回的结果=函数名(实参,...);

		//其实return的本意退出函数,但是如果return后跟着一个数据,
		//顺便将数据返回到函数作用域的外部,但return只负责返回,不负责保存
		//就算省略return,默认也会return undefined;
		//具体需不要得到函数的结果,看你自己

2、***作用域:21、全局作用域:全局变量 和 全局函数,在页面的任何一个位置都可以使用

	2、函数/局部作用域:局部变量 和 局部函数,在【当前函数调用时内部可用】

		*变量的使用规则:优先使用自己的,自己没有找全局,全局没有报错
		特殊:缺点:1、千万不要再函数中对着未声明的变量直接赋值 - 全局污染
			    2、局部可以用全局的,但是全局不能用局部的 - 解决:看上面return
	

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

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

	何时使用:永远不会自己使用,垃圾干扰我们判断 - 只会在鄙视中遇到,为什么平时开发根本不可能遇到它?
		只要你遵守以下原则:
			1、变量名和函数名尽量的不要重复
			2、先创建后使用
			3、如果鄙视时需要先试用后创建,多半都是在考你声明提前

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

	如果传递的是引用类型的对象:
		修改一个变量,另一个变量是会受到影响的,引用类型其实根本没有保存到变量中,仅仅只是保存了一个地址值
		两者用的是同一个地址值,所以会相互影响

2、预定义全局函数:

        前辈们提前定义好的,我们程序员可以直接使用的,在任何位置都可以使用
*parseInt/Float/isNaN/eval... 其实都是预定义全局函数,但是alert/prompt不属于我们现在学的范畴:确实也是全局预定义函数,只不过属于BOM

1、编码和解码
      问题:url中不允许出现多字节字符(汉字,utf-8编码格式下,一个汉字占3字节),如果出现会乱码
      解决:发送前,前端将多字节字符编码为单字节字符(数字、字母、符号)
	发送后,后端将单字节字符在解码为多字节原文
      如何:
	编码:var 不认识=encodeURIComponent("大梵");
	解码:var 原文=decodeURIComponent(不认识);
     这个东西没有用,在某一次浏览器更新后,当前就被淘汰了,浏览器自带此功能 - 唯一的用处,现在就是玩了:悄悄话

2isFinite(num):判断num是不是有效范围 - 垃圾并不能用于判断是不是NaN,因为有三个人会是false
	哪些会为falseNaN,Infinity,分母为0

3、***分支结构:根据条件的不同,选择部分代码执行

1if分支
2、三目&短路
3switch...case...语法
	switch(变量/表达式){
		case1:
		操作1;
		case2:
		操作2;
		case3:
		操作3;
		default:
		默认操作;
	}
	特殊:1、不具备隐式转换
	           2、问题:默认只要一个case满足后,就会将后面所有操作全部做一次
		解决:break;
		建议:每一个case的操作后都要跟上一个break
			有的地方可以不加break:
				1、最后一个操作default可以省略break
				2、如果中间连续的多个操作,是相同的,也可以省略掉中间部分
		
	面试题:if  vs switch
	1switch:缺点:必须要知道最后的结果才能使用,不能做范围判断
		  优点:执行效率相对较高

	2if         : 优点:可以做范围判断
		 缺点:执行效率相对较慢

	建议:代码优化:尽量的将if替换为switch或者三目或短路

ECMAscript - 核心语法1 - 掘金 (juejin.cn)
ECAM script - 核心语法3 - 掘金 (juejin.cn)
ECMA script - 核心语法4-1 - 掘金 (juejin.cn)
ECAM script - 核心语法4-2 - 掘金 (juejin.cn)
ECMA script - 核心语法5 - 掘金 (juejin.cn)
ECMA script - 核心语法6 - 掘金 (juejin.cn)
ECMA script - 核心语法7-1 - 掘金 (juejin.cn)
ECMA script - 核心语法7-2 - 掘金 (juejin.cn)
ECMAscript 8 - 掘金 (juejin.cn)
ES5&ES6 - 掘金 (juejin.cn)