JavaScript生成随机码
function randomBuildAccessCode(){
    var code = '';
    var chars = '0123456789';
    var maxPos = chars.length;
    for (var i = 0; i < 6; i++) {
        code += Math.floor(Math.random() * maxPos)
    }
    return code
}
语言:JavaScript | 阅读:6次 | 收藏:0次
移除所有已停止的DOCKER
# 一句话命令:

sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`

# 分解操作:子命令表示查找所有已停止的docker
# sudo docker ps -a|grep Exited|awk '{print $1}'

语言:Shell | 阅读:13次 | 收藏:0次
switch 简写
switch (a) {
case '张三':
	return 'age是12'
case '李四':
	return 'age是120'
}

// 使用对象替换后
const obj = {
	'张三': 'age12',
	'李四': 'age120',
}
console.log(obj['张三'])
语言:JavaScript | 阅读:10次 | 收藏:0次
短路运算 - &
const flag1 = false && true //false
const flag2 = true && true //true
语言:JavaScript | 阅读:12次 | 收藏:0次
短路运算 - ||(或)
const flag = false || true //true
// 某个值为假时可以给默认值
const arr = false || []
语言:JavaScript | 阅读:9次 | 收藏:0次
使用Boolean过滤数组假值
const compact = arr => arr.filter(Boolean)
compact([0, 1, false, 2, '', 3, 'a', 'e' * 23, NaN, 's', 34])  //[ 1, 2, 3, 'a', 's', 34 ]
语言:JavaScript | 阅读:10次 | 收藏:0次
JavaScript动态判断数据类型
//可判断类型:undefined、null、string、number、boolean、array、object、symbol、date、regexp、function、asyncfunction、arguments、set、map、weakset、weakmap

function dataTypeJudge(val, type) {
	const dataType = Object.prototype.toString.call(val).replace(/\[object (\w+)\]/, "$1").toLowerCase();
	return type ? dataType === type : dataType;
}
console.log(dataTypeJudge("young")); // "string"
console.log(dataTypeJudge(20190214)); // "number"
console.log(dataTypeJudge(true)); // "boolean"
console.log(dataTypeJudge([], "array")); // true
console.log(dataTypeJudge({}, "array")); // false

语言:JavaScript | 阅读:11次 | 收藏:0次
JavaScript奇偶数判断
const num=5;
!!(num & 1) // true
!!(num % 2) // true
语言:JavaScript | 阅读:11次 | 收藏:0次
JavaScript数字取整
3.3 | 0         // 3
-3.9 | 0        // -3

parseInt(3.3)  // 3
parseInt(-3.3) // -3

// 四舍五入取整
Math.round(3.3) // 3
Math.round(-3.3) // -3

// 向上取整
Math.ceil(3.3) // 4
Math.ceil(-3.3) // -3

// 向下取整
Math.floor(3.3) // 3
Math.floor(-3.3) // -4
语言:JavaScript | 阅读:11次 | 收藏:0次
双位运算符
//双位运算符比Math.floor(),Math.ceil()速度快

~~7.5                // 7
Math.ceil(7.5)       // 8
Math.floor(7.5)      // 7


~~-7.5            // -7
Math.floor(-7.5)     // -8
Math.ceil(-7.5)      // -7

//负数时,双位运算符和Math.ceil结果一致,正数时和Math.floor结果一致
语言:JavaScript | 阅读:10次 | 收藏:0次
判断小数是否相等
//肯定有人会说这还不简单,直接用'==='比较;
//实际上0.1+0.2 !==0.3,因为计算机不能精确表示0.1, 0.2这样的浮点数,所以相加就不是0.3了

Number.EPSILON = (function() { //解决兼容性问题
	return Number.EPSILON ? Number.EPSILON : Math.pow(2, -52);
})();
//上面是一个自调用函数,当JS文件刚加载到内存中,就会去判断并返回一个结果

function numbersequal(a, b) {
	return Math.abs(a - b) < Number.EPSILON;
}
//接下来再判断   
const a = 0.1 + 0.2, b = 0.3;
console.log(numbersequal(a, b)); //这里就为true了
语言:JavaScript | 阅读:10次 | 收藏:0次
字符串转数字 - 使用 + 操作符
+ '123'            // 123
+ 'ds'               // NaN
+ ''                    // 0
+ null              // 0
+ undefined    // NaN
+ { valueOf: ()=>'3' }    // 3
语言:JavaScript | 阅读:9次 | 收藏:0次
字符串转数字 - 用*1来转化为数字,实际上是调用.valueOf方法
'32' * 1            // 32
'ds' * 1            // NaN
null * 1            // 0
undefined * 1    // NaN
1  * { valueOf: ()=>'3' }        // 3
语言:JavaScript | 阅读:13次 | 收藏:0次
Number的数字千分位格式化
function thousandNum(num = 0) {
    const str = (+num).toString().split(".");
    const int = nums => nums.split("").reverse().reduceRight((t, v, i) => t + (i % 3 ? v : `${v},`), "").replace(/^,|,$/g, "");
    const dec = nums => nums.split("").reduce((t, v, i) => t + ((i + 1) % 3 ? v : `${v},`), "").replace(/^,|,$/g, "");
    return str.length > 1 ? `${int(str[0])}.${dec(str[1])}` : int(str[0]);
}

thousandNum(1234); // "1,234"
thousandNum(1234.00); // "1,234"
thousandNum(0.1234); // "0.123,4"
console.log(thousandNum(1234.5678)); // "1,234.567,8"
语言:JavaScript | 阅读:13次 | 收藏:0次
转化为字符串
const val = 1 + ""; // 通过+ ''空字符串转化
console.log(val); // "1"
console.log(typeof val); // "string"

const val1 = String(1);
console.log(val1); // "1"
console.log(typeof val1); // "string"
语言:JavaScript | 阅读:12次 | 收藏:0次
url参数反序列化
//一般会通过location.search拿到路由传递的参数,并进行反序列化得到对象

function parseUrlSearch() {
	const search = '?age=25&name=TYJ'
	return search.replace(/(^\?)|(&$)/g, "").split("&").reduce((t, v) = > {
		const[key, val] = v.split("=");
		t[key] = decodeURIComponent(val);
		return t;
	}, {});
}

console.log(parseUrlSearch()); // { age: "25", name: "TYJ" }
语言:JavaScript | 阅读:14次 | 收藏:0次
url参数序列化
//将对象序列化成url参数传递
function stringifyUrl(search = {}) {
	return Object.entries(search).reduce(
		(t, v) => `${t}${v[0]}=${encodeURIComponent(v[1])}&`,
		Object.keys(search).length ? "?" : ""
	).replace(/&$/, "");
}

console.log(stringifyUrl({
	age: 27,
	name: "YZW"
})); // "?age=27&name=YZW"
语言:JavaScript | 阅读:12次 | 收藏:0次
字符串翻转
function reverseStr(str = "") {
	return str.split("").reduceRight((t, v) = > t + v);
}

const str = "reduce123";
console.log(reverseStr(str)); // "123recuder"
语言:JavaScript | 阅读:12次 | 收藏:0次
函数异步执行 - Async/Await
function getSomething() {
	return "something";
}
async
function testAsync() {
	return Promise.resolve("hello async");
}
async
function test() {
	const v1 = await getSomething();
	const v2 = await testAsync();
	console.log(v1, v2); //something 和 hello async
}
test();
语言:JavaScript | 阅读:14次 | 收藏:0次
函数异步执行 - Generator
function *gen(x) {
	const y = yield x + 6;
	return y;
}

// yield 如果用在另外一个表达式中,要放在()里面
// 像上面如果是在=右边就不用加()

function *genOne(x) {
	const y = `这是第一个yield执行: $ {
		yield x + 1
	}`;
	return y;
}

const g = gen(1);
//执行 Generator 会返回一个Object,而不是像普通函数返回return 后面的值
g.next() // { value: 7, done: false }
//调用指针的 next 方法,会从函数的头部或上一次停下来的地方开始执行,直到遇到下一个 yield 表达式或return语句暂停,也就是执行yield 这一行
// 执行完成会返回一个 Object,
// value 就是执行 yield 后面的值,done 表示函数是否执行完毕
g.next() // { value: undefined, done: true }
// 因为最后一行 return y 被执行完成,所以done 为 true
语言:JavaScript | 阅读:11次 | 收藏:0次
函数异步执行 - Promise
Promise.reject('这是第二个 reject 值').then((data) = > {
	console.log(data)
}).
catch (data = > {
	console.log(data) //这是第二个 reject 值
})
语言:JavaScript | 阅读:13次 | 收藏:0次
函数自执行
const Func = function() {}(); // 常用

(function() {})(); // 常用
(function() {}()); // 常用
[function() {}()];

new function() {};
new function() {}();
void function() {}();
typeof function() {}();
delete function() {}();

+ function() {}();
- function() {}();
~ function() {}();
! function() {}();
语言:JavaScript | 阅读:12次 | 收藏:0次
函数隐式返回值
//函数省略大括号,或者将大括号改成小括号可以确保代码以单个语句的形式进行求值
(()=>3)()  //3
(()=>(
3
))()
语言:JavaScript | 阅读:14次 | 收藏:0次
JavaScript对象转化为字符串
//通过字符串+Object 的方式来转化对象为字符串(实际上是调用 .toString() 方法)
'the Math object:' + Math.ceil(3.4)                // "the Math object:4"
'the JSON object:' + {name:'曹操'}              // "the JSON object:[object Object]"
语言:JavaScript | 阅读:11次 | 收藏:0次
对象是否相等
//如果用JSON.stringify转化属性顺序不同,也不相等;
//而且不支持无法对函数 、RegExp等特殊对象的克隆

function deepCompare(x, y) {
	var i, l, leftChain, rightChain;

	function compare2Objects(x, y) {
		var p;

		// remember that NaN === NaN returns false
		// and isNaN(undefined) returns true
		if (isNaN(x) && isNaN(y) && typeof x === 'number' && typeof y === 'number') {
			return true;
		}

		// Compare primitives and functions.     
		// Check if both arguments link to the same object.
		// Especially useful on the step where we compare prototypes
		if (x === y) {
			return true;
		}

		// Works in case when functions are created in constructor.
		// Comparing dates is a common scenario. Another built-ins?
		// We can even handle functions passed across iframes
		if ((typeof x === 'function' && typeof y === 'function') || (x instanceof Date && y instanceof Date) || (x instanceof RegExp && y instanceof RegExp) || (x instanceof String && y instanceof String) || (x instanceof Number && y instanceof Number)) {
			return x.toString() === y.toString();
		}

		// At last checking prototypes as good as we can
		if (!(x instanceof Object && y instanceof Object)) {
			return false;
		}

		if (x.isPrototypeOf(y) || y.isPrototypeOf(x)) {
			return false;
		}

		if (x.constructor !== y.constructor) {
			return false;
		}

		if (x.prototype !== y.prototype) {
			return false;
		}

		// Check for infinitive linking loops
		if (leftChain.indexOf(x) > -1 || rightChain.indexOf(y) > -1) {
			return false;
		}

		// Quick checking of one object being a subset of another.
		// todo: cache the structure of arguments[0] for performance
		for (p in y) {
			if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
				return false;
			} else if (typeof y[p] !== typeof x[p]) {
				return false;
			}
		}

		for (p in x) {
			if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {
				return false;
			} else if (typeof y[p] !== typeof x[p]) {
				return false;
			}

			switch (typeof(x[p])) {
			case 'object':
			case 'function':

				leftChain.push(x);
				rightChain.push(y);

				if (!compare2Objects(x[p], y[p])) {
					return false;
				}

				leftChain.pop();
				rightChain.pop();
				break;

			default:
				if (x[p] !== y[p]) {
					return false;
				}
				break;
			}
		}

		return true;
	}

	if (arguments.length < 1) {
		return true;
	}

	for (i = 1, l = arguments.length; i < l; i++) {

		leftChain = []; //Todo: this can be cached
		rightChain = [];

		if (!compare2Objects(arguments[0], arguments[i])) {
			return false;
		}
	}

	return true;
}

const obj1 = {
	name: '张三',
	age: 23,
	obj: {
		name: '李四',
		age: 46
	},
	arr: [1, 2, 3],
	date: new Date(23),
	reg: new RegExp('abc'),
	fun: () = > {}
}
const obj2 = {
	name: '张三',
	age: 23,
	obj: {
		name: '李四',
		age: 46
	},
	arr: [1, 2, 3],
	date: new Date(23),
	reg: new RegExp('abc'),
	fun: () = > {}
}
console.log(deepCompare(obj1, obj2)) // true
语言:JavaScript | 阅读:12次 | 收藏:0次
对象深度拷贝
//JSON.stringify深度克隆对象;
//1.无法对函数 、RegExp等特殊对象的克隆;
//2.会抛弃对象的constructor,所有的构造函数会指向Object;
//3.对象有循环引用,会报错
const objDeepClone = obj = > {
	return clone(obj)
}

const isType = (obj, type) = > {
	if (typeof obj !== 'object') return false;
	// 判断数据类型的经典方法:
	const typeString = Object.prototype.toString.call(obj);
	let flag;
	switch (type) {
	case 'Array':
		flag = typeString === '[object Array]';
		break;
	case 'Date':
		flag = typeString === '[object Date]';
		break;
	case 'RegExp':
		flag = typeString === '[object RegExp]';
		break;
	default:
		flag = false;
	}
	return flag;
};

/**
 * deep clone
 * @param  {[type]} parent object 需要进行克隆的对象
 * @return {[type]}        深克隆后的对象
 */
const clone = parent = > {
	// 维护两个储存循环引用的数组
	const parents = []
	const children = []

	const _clone = parent = > {
		if (parent === null) return null
		if (typeof parent !== 'object') return parent

		let child, proto

		if (isType(parent, 'Array')) {
			// 对数组做特殊处理
			child = []
		} else if (isType(parent, 'RegExp')) {
			// 对正则对象做特殊处理
			child = new RegExp(parent.source, getRegExp(parent))
			if (parent.lastIndex) child.lastIndex = parent.lastIndex
		} else if (isType(parent, 'Date')) {
			// 对Date对象做特殊处理
			child = new Date(parent.getTime())
		} else {
			// 处理对象原型
			proto = Object.getPrototypeOf(parent)
			// 利用Object.create切断原型链
			child = Object.create(proto)
		}

		// 处理循环引用
		const index = parents.indexOf(parent)

		if (index !== -1) {
			// 如果父数组存在本对象,说明之前已经被引用过,直接返回此对象
			return children[index]
		}
		parents.push(parent)
		children.push(child)

		for (const i in parent) {
			// 递归
			child[i] = _clone(parent[i])
		}

		return child
	}
	return _clone(parent)
}

console.log(objDeepClone({
	name: '张三',
	age: 23,
	obj: {
		name: '李四',
		age: 46
	},
	arr: [1, 2, 3]
})) // { name: '张三', age: 23, obj: { name: '李四', age: 46 }, arr:[ 1, 2, 3 ] }
语言:JavaScript | 阅读:12次 | 收藏:0次
拦截对象
//利用proxy拦截对象
let obj = { name: '', age: '', sex: '' }
let handler = {
get(target, key, receiver) {
    console.log("get", key); 
return Reflect.get(target, key, receiver);
  },
set(target, key, value, receiver) {
    console.log("set", key, value); // set name 李四  // set age 24
return Reflect.set(target, key, value, receiver);
  }
};
let proxy = new Proxy(obj, handler);
proxy.name = "李四";
proxy.age = 24;
语言:JavaScript | 阅读:13次 | 收藏:0次
拦截对象
//利用Object.defineProperty拦截对象
//无法拦截数组的值

let obj = { name: '', age: '', sex: '' },
  defaultName = ["这是姓名默认值1", "这是年龄默认值1", "这是性别默认值1"];
Object.keys(obj).forEach(key => {
Object.defineProperty(obj, key, { // 拦截整个object 对象,并通过get获取值,set设置值,vue 2.x的核心就是这个来监听
get() {
return defaultName;
    },
set(value) {
      defaultName = value;
    }
  });
});

console.log(obj.name); // [ '这是姓名默认值1', '这是年龄默认值1', '这是性别默认值1' ]
console.log(obj.age); // [ '这是姓名默认值1', '这是年龄默认值1', '这是性别默认值1' ]
console.log(obj.sex); // [ '这是姓名默认值1', '这是年龄默认值1', '这是性别默认值1' ]
obj.name = "这是改变值1";
console.log(obj.name); // 这是改变值1
console.log(obj.age);  // 这是改变值1
console.log(obj.sex); // 这是改变值1

let objOne = {}, defaultNameOne = "这是默认值2";
Object.defineProperty(obj, 'name', {
get() {
return defaultNameOne;
  },
set(value) {
    defaultNameOne = value;
  }
});
console.log(objOne.name); // undefined
objOne.name = "这是改变值2";
console.log(objOne.name); // 这是改变值2
语言:JavaScript | 阅读:12次 | 收藏:0次
解构对象属性默认值
const { dec='这是默认dec值' } = { name: '张三', age: 13 }
console.log(dec) //这是默认dec值
语言:JavaScript | 阅读:11次 | 收藏:0次
解构对象属性别名
const { name:newName } = { name: '张三', age: 13 }
console.log(newName)  // 张三
语言:JavaScript | 阅读:12次 | 收藏:0次
下一页

最多阅读的代码

 SSH 登录失败:Host key verification failed Shell 程序  |  2469次阅读
 PHP分页显示制作详细讲解 PHP 程序  |  2118次阅读
 将二进制数据转为16进制以便显示 JAVA 程序  |  1792次阅读
 在Zeus Web Server中安装PHP语言支持 PHP 程序  |  1660次阅读
 让你成为最历害的git提交人 Shell 程序  |  1649次阅读
 再谈PHP中单双引号的区别详解 PHP 程序  |  1621次阅读
 Java生成UUID JAVA 程序  |  1602次阅读
 PHP实现简单爬虫的方法 PHP 程序  |  1571次阅读
 获取IMSI JAVA 程序  |  1569次阅读
 php+ajax+json 详解及实例代码 PHP 程序  |  1568次阅读
 Python 2与Python 3版本和编码的对比 Python 程序  |  1561次阅读
 wget使用技巧 Shell 程序  |  1554次阅读
 桌面中心(一)创建数据库 PHP 程序  |  1543次阅读
 PHP设计模式之工厂模式与单例模式 PHP 程序  |  1542次阅读
 php封装的page分页类完整实例 PHP 程序  |  1542次阅读
 php数组合并array_merge()函数使用注意事项 PHP 程序  |  1536次阅读
 Yii2汉字转拼音类的实例代码 PHP 程序  |  1514次阅读
 getAttribute和getAttributeNode JavaScript 程序  |  1508次阅读
 指定应用ID以获取对应的应用名称 JAVA 程序  |  1464次阅读
 python中执行shell的两种方法总结 Python 程序  |  1448次阅读
 使用WAMP搭建PHP本地开发环境 PHP 程序  |  1384次阅读
 redirect_uri参数错误的解决方法(必看) PHP 程序  |  1372次阅读
 获取IMEI JAVA 程序  |  1370次阅读
 php查询及多条件查询 PHP 程序  |  1370次阅读
 thinkPHP5.0框架简单配置作用域的方法 PHP 程序  |  1370次阅读