1.整数转任意位小数
function formatToFixed (val){
let sNum = val;
let nNum = parseFloat(sNum);
if(!isNaN(nNum)) {
return nNum.toFixed(2);
}else{
return val;
}
}
2. reduce函数可以完成叠加,例:
var items = [10, 120, 1000];
//参数1:回调函数; 参数2: 初始值
//reduce返回值不是一个数组,结果类型和形参初始值类型相同
var total = items.reduce((sumSoFar, item)=>sumSoFar + item, 0);
console.log(total); // 1130
3.合并json数据
function extend(des, src, override) {
if(src instance of Array) {
for(var i = 0, len = src.length; i < len; i++)
extend(des, src[i], override);
}
for(var i in src) {
if(override || !(i in des)) {
des[i] = src[i];
}
}
return des;
}
var a = {
"a": "1",
"b": "2"
}
var b = {
"c": "3",
"d": "4",
"e": "5"
}
extend(a, b);
console.log(JSON.stringify(a));
4./*解决使用vue进入页面闪现源码*/
[v-cloak] {
display: none;
}
在包裹的元素上添加v-cloak即可(例如:<div id="xxx" v-cloak></div>)
5.访问对象也可以 对象["键"],如person["name"]
6.局部 JavaScript 变量
在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。只要函数运行完毕,本地变量就会被删除。
7.JavaScript 变量的生存期
JavaScript 变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
8.向未声明的 JavaScript 变量分配值
如果您把值赋给尚未声明的变量,该变量将被自动作为 window 的一个属性。如carname="Volvo";将声明 window 的一个属性 carname。非严格模式下给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。
9.作用域
如果变量在函数内没有声明(没有使用 var 关键字),该变量为全局变量。
在 HTML 中, 全局变量是 window 对象: 所有数据变量都属于 window 对象。
10.转义
反斜杠是一个转义字符。 转义字符将特殊字符转换为字符串字符:转义字符 (\) 可以用于转义撇号,换行,引号,等其他特殊字符。
11.typeof x :检测变量数据类型,并返回(string/object/array)
12.=== 为绝对相等,即数据类型与值都必须相等。
13.字符串方法
charAt() 返回指定索引位置的字符
charCodeAt() 返回指定索引位置字符的 Unicode 值
concat() 连接两个或多个字符串,返回连接后的字符串
fromCharCode() 将 Unicode 转换为字符串
indexOf() 返回字符串中检索指定字符第一次出现的位置
lastIndexOf() 返回字符串中检索指定字符最后一次出现的位置
localeCompare() 用本地特定的顺序来比较两个字符串
match() 找到一个或多个正则表达式的匹配
replace() 替换与正则表达式匹配的子串
search() 检索与正则表达式相匹配的值
slice() 提取字符串的片断,并在新的字符串中返回被提取的部分
split() 把字符串分割为子字符串数组
substr() 从起始索引号提取字符串中指定数目的字符
substring() 提取字符串中两个指定的索引号之间的字符
toLocaleLowerCase() 根据主机的语言环境把字符串转换为小写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLocaleUpperCase() 根据主机的语言环境把字符串转换为大写,只有几种语言(如土耳其语)具有地方特有的大小写映射
toLowerCase() 把字符串转换为小写
toString() 返回字符串对象值
toUpperCase() 把字符串转换为大写
trim() 移除字符串首尾空白
valueOf() 返回某个字符串对象的原始值
14.null是一个只有一个值的特殊类型。表示一个空对象引用。用 typeof 检测 null 返回是object。你可以设置为 null 来清空对象
var person = null; // 值为 null(空), 但类型为对象
15.你可以设置为 undefined 来清空对象:
var person = undefined; // 值为 undefined, 类型为 undefined
16.undefined 是一个没有设置值的变量,typeof 一个没有值的变量会返回 undefined。
undefined 和 null 的区别:
null 用于对象, undefined 用于变量 ;
对象只有被定义才有可能为 null,否则为 undefined;
null 和 undefined 的值相等,但类型不等:
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
请注意:NaN 的数据类型是 number
数组(Array)的数据类型是 object
日期(Date)的数据类型为 object
null 的数据类型是 object
未定义变量的数据类型为 undefined
17.constructor 属性返回所有 JavaScript 变量的构造函数。
"John".constructor // 返回函数 String() { [native code] }
18.全局方法 String() 可以将数字转换为字符串。
19.Date方法
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。
getFullYear() 从 Date 对象以四位数字返回年份。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。
20.全局方法 Number() 可以将字符串转换为数字。空字符串转换为 0。
其他的字符串会转换为 NaN (不是个数字)。
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
21.parseFloat()解析一个字符串,并返回一个浮点数。
parseInt()解析一个字符串,并返回一个整数。
22.+ 可用于将变量转换为数字
var y = "5"; // y 是一个字符串
var x = + y; // x 是一个数字
23.全局方法 Number() 可将布尔值转换为数字。
Number(false) // 返回 0
Number(true) // 返回 1
24.全局方法 Number() 可将日期转换为数字。
25.debugger 关键字用于停止执行 JavaScript,并调用调试函数。
这个关键字与在调试工具中设置断点的效果是一样的。
如果没有调试可用,debugger 语句将无法工作。
26.变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
JavaScript 只有声明的变量会提升,初始化的不会。
var x = 5; // 初始化 xelem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;// 显示 x 和 y // x为5,y为undefind
var y = 7; // 初始化 y
实例的 y 输出了 undefined,这是因为变量声明 (var y) 提升了,但是初始化(y = 7) 并不会提升,所以 y 变量是一个未定义的变量。
27.函数提升
1、函数提升:就是把函数声明提到作用域的顶部
2、函数有两种表达方式:函数声明方式和函数表达方式
3、只有函数声明方式才能提升
28.** 块级作用域**
在每个代码块中 JavaScript 不会创建一个新的作用域,一般各个代码块的作用域都是全局的。ES5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景
1、避免由于变量提升,内层变量可能会覆盖外层变量;
2、避免用来计数的循环变量泄露为全局变量;
3、ES6允许块级作用域的任意嵌套, 外层作用域无法读取内层作用域的变量, 内层作用域可以定义外层作用域的同名变量;
4、块级作用域可以替代立即执行的匿名函数的功能
5、ES5(严格模式)规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域声明
6、ES6允许在块级作用域之中声明函数,只在大括号情况下可行,没有大括号会报错;函数声明类似于var,存在函数提升
例: {{{{ {let insane = 'Hello World'} console.log(insane); // 报错}}}};
{{{{ let insane = 'Hello World'; {let insane = 'Hello World'}}}}};
注意:环境导致的行为差异太大,应该避免在块级作用域内声明函数。 若需要,也应该写成函数表达式,而不是函数声明语句
28.href="#"与href="javascript:void(0)"的区别
# 包含了一个位置信息,默认的锚是#top 也就是网页的上端。在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。
而javascript:void(0), 仅仅表示一个死链接。
29.** 暂时性死区**
只要一进入当前作用域,所要使用的变量就已经存在,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。
30.** let与var区别**
//不同之处
1、let声明的变量只在let所在的代码块内有效
2、var有变量提升,则声明之前使用不会报错;let没有变量提升,声明前使用会报错
3、let存在暂时性死区,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响
4.ES6规定,若区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡在声明前就使用这些变量,均报错。
5.ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误。
6.let不允许在相同作用域内,重复声明同一个变量 ,var可以
31.在( )和[ ]前的语句不加分号会报错;
32:原型链(也叫隐式原型链):
访问一个对象的属性时,先在自身里面找,找到了返回;如果没有在沿着__proto__这条链yi一级一级向上找,如果找不到返回undefined;
1>.函数的显示原型指向的对象默认是空的Object对象实例对象(但Object不满足);
2>.所有函数都是Function的实例(包含Function);
3>.Object的原型对象是原型链的尽头;
33.闭包理解:
闭包是嵌套的内部函数
产生闭包的条件:
1>.函数嵌套;
2>.内部函数引用外部函数的变量或函数;
3>.执行定义内部函数就会产生闭包,不用执行内部函数;
外部函数调用几次就产生几个闭包(外部函数调用,才会声明内部函数);
闭包的生命周期:
产生:定义内部函数时产生;
死亡:在嵌套的内部函数成为垃圾对象时消失;
闭包缺点:会造成内存泄漏:
解决办法: 1>.能不用闭包就不用
2>.要及时释放;
内存溢出:所需要的内存空间大于剩余的内存时,就会抛出内存溢出的错误
内存泄漏:占用的内存空间没有及时释放;
内存泄漏的积累最终会导致内存溢出;
造成内存泄漏的可能:
1>.定时器或回调函数没有及时清理;
2>.意外的全局变量;
3>.闭包
34.//获取请求信息
var curPath = window.document.location.href;
//http://localhost:8070/map/ztreemap.html
var pathName = window.document.location.pathname;
///map/ztreemap.html
var pos = curPath.indexOf(pathName);
//获取请求地址
var Host = curPath.substring(0, pos);
//http://localhost:8070
35. 子页面中调用父页面中函数:
window.parent.window.父页面函数();
36.添加请求头
var param = { channel: "1", plate: "豫AB8309" };
param = JSON.stringify(param);
$.ajax({
type: "POST",
timeout: 10000,
//dataType: 'json',
cache: false,
async: 'true',
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1NTkwMzM2NjAsInVzZXIiOnsieWhJZCI6MjIyMjIyLCJ5aExvZ29ubmFtZSI6ImdkcyIsInloUGFzc3dvcmQiOiJlMTBhZGMzOTQ5YmE1OWFiYmU1NmUwNTdmMjBmODgzZSIsInloTmFtZSI6ImdkcyIsInF4SWQiOjUsInloVGVsIjpudWxsLCJkc0lkIjoxLCJ5eklkIjoxLCJzaW1Db2RlIjoiMSIsIm1zZyI6bnVsbCwidmVyaWZ5IjpmYWxzZX0sInN1YiI6ImdkcyJ9.2H7DFLdRE5NzPvqa96UVIxtMUNXZ_VhfMn0JwMq3dasB12oF-aB4mioiavYoFS1L6umBOQPltZMbSCYGV0qnuA");
xhr.setRequestHeader("Content-Type", "application/json");
},
url: "http://192.168.0.174:8080/api/video/getVideoUrl",
data: param,
success: function (data) {
console.log(data);
},
error: function (err) {
},
complete: function () {
}
37.select设置默认选中
var select = document.getElementById("clId");
for(var i=0;i<select.length;i++){
if(select[i].value == checkedCarNO){
select[i].selected = true;
}
}
38.校验车牌号码
//新能源车牌号正则
var xreg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
//普通车牌号正则
var creg=/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
/**
* 校验车牌号码
* @param carNo 车牌号码
* @returns
*/
function carNoReg(carNo){
if(carNo.length == 7){
return creg.test(carNo);
}else if(carNo.length == 8){
return xreg.test(carNo);
}
}