JavaScript 有用的代码片段和 trick
这篇文章将带你领略JavaScript中一些实用至极的代码片段和独特技巧,它们如同一把锐利的瑞士军刀,为开发者提供丰富的功能。让我们一起来看看这些令人惊艳的工具。
浮点数处理之艺术:取整篇
在进行Web开发时,处理浮点数常常是一个挑战。下面是一些常见的取整方法,帮助你轻松应对。
设想我们有一个浮点数 `x` 等于 `123.4545`。
1. 使用位运算符 `>>` 进行右移操作,将浮点数转换为整数:`x >> 0`;结果是 `123`。
2. 使用一元取反运算符 `~~`,这也是一种简洁的取整方式:`~~x`;结果同样是 `123`。
3. 使用位或运算符 `|` ,可以将浮点数直接转换为整数:`x | 0`;结果仍然是 `123`。
4. 使用 Math 对象的 floor 方法:`Math.floor(x)`;结果也是 `123`。
值得注意的是,前三种方法仅适用于32位整数。在处理负数时,它们的行为与 Math.floor 有所不同。这些技巧虽然简洁,但务必留意其适用范围和边界情况。
这些方法背后隐藏着JavaScript的深层次特性,体现了这门语言的灵活性和强大功能。掌握这些技巧,无疑会提高你的开发效率和代码质量。如果你热衷于JavaScript的学习和实践,那么这篇文章将是你宝贵的参考指南。
Math.floor(-12.53); // 结果为 -13
-12.53 | 0; // 结果为 -12,使用位或运算符进行向下取整
生成6位数字验证码
// 方法一
'000000' + Math.floor(Math.random() 999999) + '').slice(-6);
// 方法二
Math.random().toString().slice(-6);
// 方法三
Math.random().toFixed(6).slice(-6);
// 方法四
'' + Math.floor(Math.random() 999999);
生成十六进制颜色代码
(function() {
return '' + ('00000' + (Math.random() 0x100000 << 0).toString(16)).slice(-6);})();
驼峰命名转下划线
'ponentMapModelRegistry'.match(/^[a-z][a-z0-9]+|[A-Z][a-z0-9]/g).join('_').toLowerCase(); // 结果为 ponent_map_model_registry,将驼峰命名转换为下划线分隔的命名格式。
URL查询参数转JSON格式
// ES6写法
const query = (search = '') => ((querystring = '') => (q => (querystring.split('&').forEach(item => (kv => kv[0] && (q[kv[0]] = kv[1]))(item.split('='))), q))({}))(search.split('?')[1]);
// 对应ES5实现
var query = function(search) { if (search === void 0) { search = ''; } return (function(querystring) { if (querystring === void 0) { querystring = ''; } return (function(q) { return (querystring.split('&').forEach(function(item) { return (function(kv) { return kv[0] && (q[kv[0]] = kv[1]); })(item.split('=')); }), q); })({}); })(search.split('?')[1]); }; query('?key1=value1&key2=value2'); // 结果为 {key1: "value1", key2: "value2"},将URL查询参数转换为JSON格式。
获取URL参数
function getQueryString(key){ var reg = new RegExp("(^|&)"+ key +"=([^&])(&|$)"); var r = window.location.search.substr(1).match(reg); if(r!=null){ return unescape(r[2]); } return null; } ,获取URL中的指定参数值。
n维数组展开成一维数组
var foo = [1, [2, 3], ['4', 5, ['6',7,[8]]]]; 可以通过以下方法将多维数组转换为一维数组:
// 方法一,利用JSON的字符串化和
JSON.parse(`[${JSON.stringify(foo).replace(/\[|]/g, '')}]`); // 结果为一维数组 [1, 2, 3, "4", 5, "6", 7, 8]。利用JSON的字符串化功能将数组转为字符串,再替换掉数组符号并回数组。
// 方法二,递归展开数组
function flatten(ary) { return ary.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []); } flatten(foo); // 结果为一维数组 [1, 2, 3, "4", 5, "6", 7, 8]。递归遍历数组并连接所有元素。
// 方法三,利用ES6的解构赋值和扩展运算符 ...,但需要注意这种方法只适用于特定格式的数组,对于复杂的嵌套结构可能无法完全展开。
一、创建特定长度的非空数组
在JavaScript中,我们可以使用`Array.fill()`方法结合`Array.prototype`来创建一个具有特定长度的非空数组。例如,创建一个长度为5的数组,所有元素均为数字1:
```javascript
function createFilledArray(length, value) {
return new Array(length).fill(value);
}
var arr = createFilledArray(5, 1); // 输出:[1, 1, 1, 1, 1]
```
此方法可以快速生成具有特定长度的数组,并且所有元素的值都是相同的。
二、对象创建与属性赋值
对于对象的创建和属性赋值,我们可以使用简洁的语法来创建对象并为其分配属性:
```javascript
function createPerson(name, age) {
return { name, age }; // 使用简洁语法创建对象并分配属性
}
var person = createPerson('John Doe', 30); // 输出:{ name: 'John Doe', age: 30 }
```
这种写法简洁明了,易于理解。
三、格式化表单数据为查询字符串参数
对于表单数据的格式化,我们可以优化原有的`formatParam`函数以更简洁的方式实现同样的功能:
```javascript
function formatParams(obj) {
let query = '';
for (let key in obj) {
let value = obj[key];
if (Array.isArray(value)) {
value.forEach((item) => {
query += `${key}=${encodeURIComponent(item)}&`; // 对数组中的每个元素进行编码并添加到查询字符串中
});
} else if (typeof value === 'object' && value !== null) { // 递归处理嵌套对象
query += formatParams(value) + '&'; // 使用递归调用处理嵌套对象中的属性并添加到查询字符串中
想象一下我们手中有两个数组,一个是通过 `new Array(3)` 创建的,另一个则是直接定义了三个 `undefined` 值的数组。当对这两个数组执行map()方法时,结果截然不同。第一个数组 `[empty × 3]` 在map()中并不会返回任何有意义的值,而第二个数组 `[0, 1, 2]` 则会返回数组的索引值。
在大多数情况下,我们可能更希望创建一个包含undefined值但具有特定长度的数组。为了达到这个目的,可以采用一些技巧,比如利用狼蚁网站的SEO优化方法。通过 `Array.apply(null, { length: 3 })`,我们可以轻松地创建一个包含三个undefined元素的数组。使用这个数组执行map()方法时,会得到预期的结果:`[0, 1, 2]`。
在此,我想提醒大家尽量避免使用空单元数组。它们可能在某些情况下引发混淆或问题。
以上所述是长沙网络推广为大家带来的JavaScript实用代码片段和技巧分享,希望能对大家有所帮助。如果你有任何疑问或需要进一步的解释,请随时给我留言。长沙网络推广团队会及时回复大家的提问,并对大家的支持表示衷心的感谢。也感谢大家对狼蚁SEO网站的持续关注和支持!
现在,让我们用Cambrian的渲染方法展示这些内容吧:`cambrian.render('body')`。
微信营销
- JavaScript 有用的代码片段和 trick
- 关于HTTP传输中gzip压缩的秘密探索分析
- 用 Composer构建自己的 PHP 框架之设计 MVC
- javaScript知识点总结(必看篇)
- Javascript 是你的高阶函数(高级应用)
- php注册登录系统简化版
- 基于webpack.config.js 参数详解
- 已有打开的与此命令相关联的DataReader,必须首先将
- Mysql两表联合查询的四种情况总结
- 教你怎么用JSP统计网站访问人数
- echarts整合多个类似option的方法实例
- 图片懒加载imgLazyLoading.js使用详解
- MySQL的InnoDB扩容及ibdata1文件瘦身方案完全解析
- PHP的cookie与session原理及用法详解
- PHP判断密码强度的方法详解
- javascript匀速动画和缓冲动画详解