前言
我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣带你进入前端巅峰交流群 今天继续对前端知识的小结
根据每个元素i属性进行排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>排序</title>
</head>
<body>
<script>
var ar=[{i:5,v:1},{i:2,v:4},{i:3,v:2},{i:1,v:5}]
ar.sort(function(a,b){
return a.i-b.i
})
console.log(ar,"ar")
// {i: 1, v: 5}
// {i: 2, v: 4}
// {i: 3, v: 2}
// {i: 5, v: 1}
</script>
</body>
</html>
检测一个变量是string类型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>检测变量是string类型</title>
</head>
<body>
<script>
//true
var geyao="hello geyao"
function stringBoolean(str){
if(typeof str == "string"||str.constructor==String){
return true
}else{
return false
}
}
</script>
</body>
</html>
模块模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>模块模式</title>
</head>
<body>
<script>
//适合那些单列必须是某种类型的实例,同时还必须添加某些属性或方法对其加以增强的情况
function CustomType() {
this.name = "歌谣";
};
CustomType.prototype.getName = function(){
return this.name;
}
var application = (function(){
// 定义私有
var privateA = "方方";
// 定义私有函数
function A(){};
// 实例化一个对象后,返回该实例,然后为该实例增加一些公有属性和方法
var object = new CustomType();
// 添加公有属性
object.A = "康康";
// 添加公有方法
object.B = function(){
return privateA;
}
// 返回该对象
return object;
})();
</script>
</body>
</html>
模拟hashTable类包含add remove等
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
function Hashtable(){
this.container=new Object()
this.put=function(key,value){
if(typeof(key)=="undefined"){
return false
}
if(this.container(key)){
return false
}
this.container[key]=typeof(value)=="undefind"?null:value
return true
}
this.remove=function(key){
delete this.container[key]
}
this.size=function(){
var size=0;
for(var attr in this.container){
size++
}
return size
}
this.get=function(key){
return this.container[key]
}
this.container=function(key){
return typeof(this.container[key]!="undefined")
}
this.clear=function(){
for(var attr in this.container){
delete this.container[attr]
}
}
this.toString=function(){
var str=""
for(var attr in this.container){
str+=","+attr+"="+this.container[atr]
}
if(str.length>0){
str=str.substr(1,str.length)
}
return "("+str+")"
}
}
</script>
</body>
</html>
求阶乘
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>求阶乘</title>
</head>
<body>
<!-- 模拟面试之阶乘题 前端巅峰人才交流群私信我-->
<!-- 求n得阶乘 递归-->
<script>
function geyao(N){
return N=1?1:geyao(N-1)*N
}
</script>
</body>
</html>
浅拷贝实现方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浅拷贝实现方式assign</title>
</head>
<body>
<script>
//浅拷贝是创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,
//拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象
//任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象
let obj1 = {
person: {
name: "geyao",
age: 18
},
sports: 'basketball'
};
let obj2 = Object.assign({}, obj1);
obj2.person.name = "fangfang";
obj2.sports = 'football'
console.log(obj1); // { person: { name: '小红', age: 18 }, sports: 'basketball' }
console.log(obj2); // { person: { name: '小红', age: 18 }, sports: 'football' }
obj1.person.name = "小红";
console.log(obj1);//{ person: { name: '小红', age: 18 }, sports: 'basketball' }
console.log(obj2); // { person: { name: '小红', age: 18 }, sports: 'football' }
</script>
</body>
</html>
浅拷贝实现方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浅拷贝实现方式2</title>
</head>
<body>
<script>
let obj1 = {
name: '歌谣',
address: {
x: 100,
y: 100
}
}
let obj2 = {
...obj1
}
obj1.address.x = 200;
obj1.name = '方方'
console.log('obj2', obj2) // obj2 { name: '方方', address: { x: 200, y: 100 } }
</script>
</body>
</html>
浅拷贝实现方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>concat</title>
</head>
<body>
<script>
let arr = [1, 3, {
username: '歌谣'
}];
let arr2 = arr.concat();
arr2[2].username = '方方';
console.log(arr); //[ 1, 3, { username: '方方' } ]
</script>
</body>
</html>
浅拷贝实现方式4
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>浅拷贝实现方式4</title>
</head>
<body>
<script>
let arr = [1, 3, {
username: ' 歌谣'
}];
let arr3 = arr.slice();
arr3[2].username = '方方'
console.log(arr); // [ 1, 3, { username: '方方' } ]
</script>
</body>
</html>
深拷贝
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>深拷贝</title>
</head>
<body>
<script>
function deepClone(obj, hash = new WeakMap()) {
console.log(hash,"hash")
if (obj === null) return obj; // 如果是null或者undefined我就不进行拷贝操作
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
// 可能是对象或者普通的值 如果是函数的话是不需要深拷贝
if (typeof obj !== "object") return obj;
// 是对象的话就要进行深拷贝
if (hash.get(obj))
return hash.get(obj);
let cloneObj = new obj.constructor();
console.log(cloneObj,"cloneObjtest")
// 找到的是所属类原型上的constructor,而原型上的 constructor指向的是当前类本身
hash.set(obj, cloneObj);
for (let key in obj) {
console.log(key,"key")
console.log(obj[key],"obj[key]")
console.log(hash,"hashList")
if (obj.hasOwnProperty(key)) {
// 实现一个递归拷贝
cloneObj[key] = deepClone(obj[key], hash);
console.log( cloneObj[key],"cloneObj")
}
}
return cloneObj;
}
let obj = {
name: 1,
address: {
x: 100
}
};
obj.o = obj; // 对象存在循环引用的情况
let d = deepClone(obj);
obj.address.x = 200;
console.log(d);
</script>
</body>
</html>
总结
标签:function,知识点,return,14,记录,console,key,obj,log From: https://blog.51cto.com/u_14476028/6524009我是歌谣 最好的种树是十年前 其次是现在 加油 歌谣