前端笔记
简介
随手记
URL
前端访问后端地址,带有小数点导致参数不全
例:
会忽略小数点之后的内容。
原因:url中含有小数点,浏览器会认为是访问的文件
解决办法:
- 访问API时,url的末尾加 /, 如:https://localhost:3000/download/voice.wav/
- 把带小数点的路径前移, 如:https://localhost:3000/voice.wav/download
在后端中,如果需要接收voice.wav这个参数,Spring可以用:1
2
3
4
public ResponseEntity<byte[]> download( String fileName) {
...
}
JS
1.函数
js中有三种:函数声明、函数表达式、匿名函数
函数声明: function fnName() {...}
;
使用 function 关键字声明一个函数,再执行一个函数名,叫函数声明。
函数表达式: var fnName = function() { ... }
;
使用 function 关键字声明一个函数,但未给函数命名,最后将匿名函数赋予一个变量,叫函数表达式,这是最常见的函数表达式语法形式。
匿名函数: function() { ... }
;
使用 function 关键字声明一个函数,但未给函数命名,所以叫匿名函数,匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。
函数声明和函数表达式不同之处在于
1、JavaScript 引擎在解析 JavaScript 代码时会“函数声明提升”当前执行环境(作用域)上的函数声明,而函数表达式必须等到 JavaScript 引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式。
2、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以 fnName() 形式调用。
1 | (function(a) { |
可以看到输出结果,在 function 前面加 ! 、+ 、- 甚至是逗号等都可以起到函数定以后立即执行的效果,而 () 、! 、+ 、- 、= 等运算符,都将函数声明转换成函数表达式,消除了 javascript 引擎识别函数表达式和函数声明的歧义,告诉 javascript 引擎这是一个函数表达式,不是函数声明,可以在后面加括号,并立即执行函数的代码。
加括号是最安全的做法,因为 ! 、+ 、- 等运算符还会和函数的返回值进行运算,有时造成不必要的麻烦。
立即执行函数作用:创建一个独立的作用域。
不过这样的写法有什么用呢?
javascript 中没有私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中声明了一些变量,可能会被其他人不小心用同名的变量给覆盖掉,根据 javascript 函数作用域链的特性,可以使用这种技术可以模仿一个私有作用域,用匿名函数作为一个“容器”,“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,所以 (function(){ … })() 内部定义的变量不会和外部的变量发生冲突,俗称“匿名包裹器”或“命名空间”。
jQuery 使用的就是这种方法,将 jQuery 代码包裹在 (function(window,undefined){ …jquery代码…})(window) 中,在全局作用域中调用 jQuery 代码时,可以达到保护 jQuery 内部变量的作用。
参考资料:10道典型的JavaScript面试题
splice()数组元素的插入删除与替换
面试的时候如果主考官让你使用JavaScript来实现对数组元素进行插入、删除、替换操作。如果不知道Array.prototype.splice的使用的方法那很有可能就要被扣分了。使用javascript数组类型内置的splice方法仅需一行代码即可轻松实现对数组元素进行插入、删除、替换操作。
方法名:Array.prototype.splice(index,count[,elm1,elm2…n])
使用Array类型的splice方法可以对数组元素进行插入、替换、删除。该方法讲直接影响当前的数组对象(与.slice(index1,index2)方法不同)并返回被删除的数组项。
参数:
index :数组中元素的起始下标。
count :需要要被删除或替换的元素个数。
elems :需要插入到数组中的项。
返回值 :返回从素组中被移除的项。
1 | <script type="text/javascript"> |