转义运算符:
var x = 'It\'s alright';
var y = "He is called \"Johnny\"";
var x = "John";
var y = new String("John");
typeof x // 返回 String
typeof y // 返回 Object
字符串方法:
var a = 'a你好,世界,hello world!';
var b = 'bbbb';
var c = '就好嘿嘿或'
a.charAt(3) //返回指定索引值的字符 // ","
a.charCodeAt(0) //返回指定索引值所在字符的Unicode值 // 97
a.concat(b) //连接两个或多个字符串,返回连接后的字符串 //"a你好,世界,hello world!bbbb"
a.concat(b,c) // "a你好,世界,hello world!bbbb就好嘿嘿或"
String.fromCharCode(65) //将 Unicode 转换为字符串 //'A'
a.slice(2,5) //"好,世"
var mystring="Hello world!";
mystring.substring(2,4); //输出“ll”
mystring.substr(2,4); //输出“llo”
break 语句用于跳出循环。
continue 用于跳过循环中的一个迭代。
for (i=0;i<10;i++)
{
if (i==3) break;
x=x + "The number is " + i + "<br>";
}
//输出了 i=3以前
for (i=0;i<=10;i++)
{
if (i==3) continue;
x=x + "The number is " + i + "<br>";
}
//除了i=3没输出,其他的都输出了
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
null和undefined值相同,但是数据类型不同
数据类型:5大类型:number,boolean,function,object,string
三种对象类型:Object,Date ,Array
2种不包含任何值的数据类型:null undefined
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
请注意:
NaN 的数据类型是 number
数组(Array)的数据类型是 object
日期(Date)的数据类型为 object
null 的数据类型是 object
未定义变量的数据类型为 undefined
"John".constructor // 返回函数 String() { [native code] }
(3.14).constructor // 返回函数 Number() { [native code] }
false.constructor // 返回函数 Boolean() { [native code] }
[1,2,3,4].constructor // 返回函数 Array() { [native code] }
{name:'John', age:34}.constructor // 返回函数 Object() { [native code] }
new Date().constructor // 返回函数 Date() { [native code] }
function () {}.constructor // 返回函数 Function(){ [native code] }
判断是否为数组类型:
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
返回布尔类型
toFixed() 把数字转换为字符串,结果的小数点后有指定位数的数字。
Number("3.14") // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
5 + null // 返回 5 null 转换为 0
"5" + null // 返回"5null" null 转换为 "null"
"5" + 1 // 返回 "51" 1 转换为 "1"
"5" - 1 // 返回 4 "5" 转换为 5
有一个耐人寻味的现象就是如果
1 == true / 0==false // 结果都为true
2 == true // 非1的数字跟true比较得布尔值 false
所以会有 1 < 2 < 3 //true 3> 2>1 //false
但是如果在if(条件){}
条件中,如果是非0的话,都会走if中语句 if(2){console.log(true)} //true
Boolean('0') //true
Boolean(0) //false
我们可以使用typeof来获取一个变量是否存在,如if(typeof a!="undefined"){},而不要去使用if(a)因为如果a不存在(未声明)则会出错
正因为typeof遇到null,数组,对象时都会返回object类型,所以当我们要判断一个对象是否是数组时
或者判断某个变量是否是某个对象的实例则要选择使用另一个关键语法instanceof
instanceof用于判断一个变量是否某个对象的实例,如var a=new Array();alert(a instanceof Array);会返回true,
同时alert(a instanceof Object)也会返回true;这是因为Array是object的子类。
再如:function test(){};var a=new test();alert(a instanceof test)会返回true。
//去除重复数组对象
其中 registerId为数组对象中 某一数据的唯一标识
function uniqueArr(arr){
//1.
var obj = {};
arr = arr.reduce(function(item, next) {
obj[next.registerId] ? '' : obj[next.registerId] = true && item.push(next);
return item;
}, []);
return arr;
// 2.
var allArr = [];//新数组
$.each(oldArr,function(i,v){
var flag = true;
if(allArr.length > 0){
$.each(allArr,function(n,m){
if(allArr[n].registerId == oldArr[i].registerId){flag = false;};
});
};
if(flag){
allArr.push(oldArr[i]);
};
});
console.log(allArr)
}
// 3.
ES6新语法,支持扩展符和set
function distinct(a, b) {
return Array.from(new Set([...a, ...b]))
}
这个方法耗时最少
// 4.还有一种方法(在网上看到的,耗时也很少,对性能也很好) 首先创建一个空对象,然后用 for 循环遍历
利用对象的属性不会重复这一特性,校验数组元素是否重复
function distinct(a, b) {
let arr = a.concat(b)
let result = []
let obj = {}
for (let i of arr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
}
// 往列表中插入一部分数据 防止操作这行数据 不能用直接用 new Array(10). fill(item)
let item = {
name: '王小虎',
department: '网络安全部'
}
this.tableList = new Array(10).fill(JSON.stringify({
name: '王小虎',
department: '网络安全部'
}))
this.tableList = this.tableList.map( item => JSON.parse(item))
let item = {
name: '王小虎',
department: '网络安全部'
}
this.tableList = Array.apply(null, { length: 3 }).map(() => ({
name: '王小虎',
department: '网络安全部'
}));