背景
“基础知识之js碎片知识,给自己一个查询字典。会持续更新...
js引入
- script标签引入js文件
- script标签内部的js代码
- 如果一个script标签引入外部js文件,内部也有js代码会导致内部js代码失效。
js基本语法
- 1.变量声明 var a; 变量赋值 a = 100;
- 2.变量命名规则
:①:变量名必须以英文字母、_、'$'开头,②:变量名可以包括英文字母、_、$、数字,③:不可以用系统关键字、保留字作为变量名。
- 3.值类型:原始类型(栈数据),引用类型(堆数据)。
原始值赋值:
引用类型赋值:
- 4.字符串比较是比较ASCII码位置常用的A是65,a是97
- 5.&& 运算符:先看第一表达式转换成布尔值得结果,如果结果为真,只有两个表达式,返回第二个表达式的值,如果第一个表达式为假,返回第一个表达式。(undefined,null,NaN,'',0,false 转换布尔为false,其他的为true。)
- 6.|| 运算符:第一个表达式为真则返回第一个,第一个为假则返回第二个。
- 7.for循环另类写法
- while循环就是上面的for循环另类写法
- switch case语句 如果不加break,有一个case判断成功了,后面的case语句都会运行。
特殊写法:
10.break 跳出循环,continue 终止本次循环开始下次循环。
11.数组splice方法:arr.splice(i,j,k),从第i位开始,切出去j位,再在原位置插入k,返回切的数组
var arr = [1,2,3];
var arr1 = arr.splice(1,1,4,5,6)
console.log(arr) // [1,4,5,6,3]
console.log(arr1) // [2]
- 12.数组sort方法:传入两个形参,然后看返回数值,为负则前面的数放在前面,为正则后面的数放在前面,为0不动。
var arr = [1,5,3,7,10];
arr.sort((a,b)=>{
return a-b // b-a则为降序
})
console.log(arr) // [1,3,5,7,10] 升序
// 数组乱序可以用sort随机返回正负
// Math.random() - 0.5 会随机正负
- 改变原数组的方法:push(返回数组长度),pop(返回删除的那个item),shift(同pop,但是是删除第一个),unshift(同push,但是从第一位插入),sort,reverse,splice。不改变原数组的方法:concat,join,slice(从该位开始截取,截取到该位)
js类型
typeof 用来返回输入的类型,可能返回的类型有:number,string,boolean,object,undefined,function。
1.显式类型转换
- Number() 将内容转换为数字。Number(undefined)=>NaN,Number(null)=>0,Number('a')=>NaN
- parseInt() 一种用处是转换成整型;另一种是把第一个参数看为第二参数的进制,然后转换成10进制返回。例如:parseInt('10',16)=>16;parseInt("100px")=>100。
- String() 转换成字符串
- Boolean() 转换成布尔
- toString() null和undefined不可以用此方法。 10.toString(8) 将10转换成8进制。[].toString ==>"" {}.toString() ==> [object object]
- 隐式类型转换
- isNaN() 把里面的数先进行Number()转化,再看是不是NaN,返回true或false。
- null == undefined,如果一个是数字,则把另一个转换成数字,进行比较。如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值。如果一个是对象,另一个是数值或字符串,把对象转换成基础类型,调用toString或者valueOf方法(valueOf>toString)。
- +运算 如果为一元运算则转为数字,如果为二元运算:有一边是字符串的情况下,另一边也转成字符串,没有字符串的情况,两边都转成数字,如果其中一个是对象,对象转换成原始值(日期对象调用toString,其他调用valueOf)。
- 练习:[] == ![] => [] == false => [] == 0 => 0 == 0 结论true(Number([])=>0)
- 练习:{} == !{} => {} == false => {} == 0 => NaN == 0 结论false(Number({})=>NaN)
常见js题
答案:'1undefined'。
var a = 1
var b = --a + a--
// 解题思路:++a或者--a是返回运算后的值,a--或者a++是返回运算前的值
// 所以--a返回运算后是0,这时候a也是0,然后a--返回的是0,这时候a已经是-1
// 所以b = 0 + 0 = 0 ,a此时为-1
- js中连续调用方法,可以写成一个对象,对象的每个方法return this。
- 数组去重的思考
// es6: // 数组去重,扁平化 var arr = [1, 2, [3, 4, 5, [7, 4]], 6]; var arr1 = [...new Set(arr.flat(Infinity))]; console.log(arr1); // [1,2,3,4,5,7,6]// 键值对去重 // 数组键值对去重 function unique(arr) { // 方法1:去重计数 // var obj = {}; // for (var i = 0; i < arr.length; i++) { // obj[arr[i]] ? (obj[arr[i]] += 1) : (obj[arr[i]] = 1); // } // return Object.keys(obj); // 这是返回的字符串
// 方法2:去重计数 // var obj = arr.reduce((p, n) => { // console.log(p, n); // p[n] = p[n] + 1 || 1; // return p; // }, {}); // return Object.keys(obj);
// 方法3:去重计数 // var obj = {} // return arr.filter((it) => { // if (obj.hasOwnProperty(typeof it + it)) { // obj[typeof it + it]++; // return true; // } else { // obj[typeof it + it] = 1; // return false; // } // });
// // 仅仅去重 // var obj = {}; // return arr.filter((it) => { // return obj.hasOwnProperty(typeof it + it) // ? false // : (obj[typeof it + it] = true); // }); } console.log(unique([1,2,2,2,2,3]));//[1,2,3]
总结:
由于本人技术能力所限,如果相关错误请及时与我联系修改,谢谢!
本文使用 mdnice 排版