30个 JS 实用技巧总结,助你提升工作效率

2023-11-16

08658fa61b6234d3b9612b690ec6811f.png

英文 | https://javascript.plainenglish.io/35-javascript-short-hands-coding-methodologies-28ea2d7d0a5e

翻译 | 杨小二

我是Rakshit Shah,我在 IT 行业的工作经验已经超过5年了。我是一名全栈开发人员。JavaScript确实是所有全栈开发人员的必会的技术。其他技术(Angular、Java、VueJS 等)的语法会有所不同,但我们应该更多地关注概念与实际应用!

在本文中,我将向你展示我多年来掌握的JavaScript开发技巧。当你开发很棒的脚本时,这些可能对你有用!

优化和高度可读的代码将增加你对日常工作生活的兴趣。

现在,就让我们开始吧。

1、声明变量

在函数的开头声明赋值变量是一种很好的做法。在同时声明多个变量时,这种速记方法可以为你节省大量时间和空间。

不友好写法:

let x;
let y;
let z = 3;

友好写法:

let x, y, z=3;

2、使用三元运算符

当你开始使用三元条件而不是使用 if...else 语句时,你的生活会变得更轻松。

不友好写法:

const age = 26;
let eligibility;
if(age > 18){
  eligibility = "Allowed";
}
else{
  eligibility = "Not Allowed";
}

友好写法:

let eligibility = (age > 18) ? "Allowed" : "Not Allowed";

你还可以像这样嵌套 if 语句:

let eligibility = age > 10 ? "greater than 10" : (age < 5 ? "less than 5" : "between 5 and 10");

3、JavaScript For 循环

如果你想要纯JavaScript 并且不想依赖诸如 jQuery 或 lodash 之类的外部库,那么这个小技巧非常有用。

不友好写法:

const fruits = ['mango', 'peach', 'banana'];
for (let i = 0; i < fruits.length; i++)

友好写法:

for (let fruit of fruits)

如果你只想访问索引,请执行以下操作:

for (let index in fruits)

如果你想访问文字对象中的键,这也适用:

const obj = {continent: 'Africa', country: 'Kenya', city: 'Nairobi'}
for (let key in obj)
  console.log(key) // output: continent, country, city

Array.forEach 的简写:

function logArrayElements(element, index, array) {
  console.log("a[" + index + "] = " + element);
}
[5, 7, 2].forEach(logArrayElements);
// a[0] = 5
// a[1] = 7
// a[2] = 2

4、数组查找

如果你曾经负责用纯 JavaScript 编写 find 函数,你可能会使用 for 循环。在 ES6 中,引入了一个名为 find() 的新数组函数。

不友好写法:

const pets = [
  { type: 'Dog', name: 'Max'},
  { type: 'Cat', name: 'Karl'},
  { type: 'Dog', name: 'Tommy'},
]
function findDog(name) {
  for(let i = 0; i<pets.length; ++i) {
    if(pets[i].type === 'Dog' && pets[i].name === name) {
      return pets[i];
    }
  }
}

友好写法:

pet = pets.find(pet => pet.type ==='Dog' && pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }

5、If Presence

这可能是微不足道的,但值得一提。在进行“if 检查”时,有时可以省略赋值运算符。

不友好写法:

if (isLovely === true)

友好写法:

if (isLovely)

另外,请注意,这两个示例并不完全相等,因为只要 isLovely 是一个真值,它检查就会通过。

这是另一个例子。如果 a 不等于 true,则执行某些操作。

不友好写法:

let a;
if ( a !== true ) {
// do something...
}

友好写法:

let a;
if ( !a ) {
// do something...
}

额外加餐:格式化 JSON 代码

当你想在不使用任何第三方工具的情况下格式化 JSON 对象或 JSON 响应时。打开你的浏览器控制台并点击以下命令来格式化你的JSON。

stringify 方法接受三个输入。值、替换器和空间。也许,你只知道价值!

接下来的两个是可选参数。这就是为什么我们没有以一般方式使用它们。要缩进我们的 JSON,我们必须使用 space 参数。

console.log(JSON.stringify({name:"Rax",Age:26},null,'\t'));

6、 箭头函数

经典函数以其简单的形式易于阅读和编写,但是一旦你开始将它们嵌套在其他函数调用中,它们就会变得有点冗长和混乱。

不友好写法:

function sayHi(name) {
  console.log('Hello Rax', name);
}
setTimeout(function() {
  console.log('Loaded')
}, 2000);
list.forEach(function(item) {
  console.log(item);
});

友好写法:

sayHi = name => console.log('Hello Rax', name);
setTimeout(() => console.log('Loaded'), 2000);
list.forEach(item => console.log(item));

需要注意的是,箭头(类似于 Java Lambda 表达式)函数中 this 的值与普通函数的确定方式不同,因此,这两个示例并不严格等效。

7、多行字符串

如果你发现自己需要在代码中编写多行字符串,你可以这样编写:

不友好写法:

const lorem = 'Lorem ipsum dolor sit amet, consectetur\n\t'
    + 'adipisicing elit, sed do eiusmod tempor incididunt\n\t'
    + 'ut labore et dolore magna aliqua. Ut enim ad minim\n\t'
    + 'veniam, quis nostrud exercitation ullamco laboris\n\t'
    + 'nisi ut aliquip ex ea commodo consequat. Duis aute\n\t'
    + 'irure dolor in reprehenderit in voluptate velit esse.\n\t'

但是,有一个更简单的方法。只需使用反引号` ...`。

友好写法:

const lorem = `Lorem ipsum dolor sit amet, consectetur
    adipisicing elit, sed do eiusmod tempor incididunt
    ut labore et dolore magna aliqua. Ut enim ad minim
    veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute
    irure dolor in reprehenderit in voluptate velit esse.`

8、模板文字

你是否厌倦了使用 ' + ' 将多个变量连接成一个字符串?难道没有更简单的方法来做到这一点吗?如果你能够使用 ES6,那么,你很幸运。你需要做的就是使用反引号和 ${} 来包含你的变量。

不友好写法:

const welcome = 'You have logged in as ' + firstName + ' ' + lastName + '.'
const db = 'http://' + host + ':' + port + '/' + database;

友好写法:

const welcome = `You have logged in as ${firstName} ${lastName}`;
const db = `http://${host}:${port}/${database}`;

9、十进制指数

你可能已经看到了这个。它本质上是一种不带尾随零的数字书写方式。例如,1e5 实质上意味着 1 后跟 5 个零。它表示一个等于 1,00,000 的十进制基数(JavaScript 将其解释为浮点类型)。

不友好写法:

for (let i = 0; i < 10000; i++) {}

友好写法:

for (let i = 0; i < 1e7; i++) {}
// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;

10、短路评估

如果预期的参数为空或未定义,则无需编写五六行代码来分配默认值,我们可以简单地使用短路逻辑运算符并仅用一行代码完成相同的事情。

不友好写法:

let dbHost;
if (process.env.DB) {
  dbHost = process.env.DB;
} else {
  dbHost = '127.0.0.1';
}

友好写法:

const dbHost = process.env.DB || '127.0.0.1';

加餐:获取数组中的最后一项

如果你想从数组的末尾取元素,你可以使用带有负整数的切片方法。

let array = [0, 1, 2, 3, 4, 5, 6, 7] 
console.log(array.slice(-1));
>>>[7]
console.log(array.slice(-2));
>>>[6, 7]
console.log(array.slice(-3));
>>>[5, 6, 7]

11、对象属性

在 JavaScript 中定义对象字面量让生活变得更轻松。ES6 提供了一种更简单的方法来为对象分配属性。如果变量名称与对象键相同,则可以利用速记符号。

不友好写法:

const x = 2020, y = 2021;
const obj = { x:x, y:y };

友好写法:

const obj = { x, y };

12、隐式回报

return 是我们经常使用的关键字,用于返回函数的最终结果。带有单个语句的箭头函数将隐式返回其计算结果(该函数必须省略大括号 ({}) 以省略 return 关键字)。

要返回多行语句(例如对象字面量),必须使用 () 而不是 {} 来包装函数体。这确保代码被评估为单个语句。

不友好写法:

function calcCircumference(diameter) {
  return Math.PI * diameter
}

友好写法:

calcCircumference = diameter => (
  Math.PI * diameter;
)

13、解构赋值

如果你正在使用任何流行的 Web 框架,你很有可能会使用对象文字形式的数组或数据在组件和 API 之间传递信息。一旦数据对象到达一个组件,你就需要解压它。

不友好写法:

const observable = require('mobx/observable');
const action = require('mobx/action');
const runInAction = require('mobx/runInAction');
const store = this.props.store;
const form = this.props.form;
const loading = this.props.loading;
const errors = this.props.errors;
const entity = this.props.entity;

友好写法:

import { observable, action, runInAction } from 'mobx';
const { store, form, loading, errors, entity } = this.props;

你甚至可以分配自己的变量名称:

const { store, form, loading, errors, entity:contact } = this.props;

大多数情况下,Visual Studio 代码编辑器提供用于自动导入或自动完成的插件。

14、展开运算符

ES6 中引入的扩展运算符有几个用例,可以使 JavaScript 代码使用起来更加高效和有趣。它可用于替换某些数组函数。展开运算符是用三个点表示的。

不友好写法:

// joining arrays
const odd = [1, 3, 5];
const nums = [2 ,4 , 6].concat(odd);
// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = arr.slice()

友好写法:

// joining arrays
const odd = [1, 3, 5 ];
const nums = [2 ,4 , 6, ...odd];
console.log(nums); // [ 2, 4, 6, 1, 3, 5 ]
// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = [...arr];

与 concat() 函数不同,你可以使用扩展运算符在另一个数组内的任何位置插入一个数组。

const odd = [1, 3, 5 ];
const nums = [2, ...odd, 4 , 6];

你还可以将扩展运算符与 ES6 解构符号结合使用:

const { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }

15、默认参数值

你可以使用 if 语句来定义函数参数的默认值。在 ES6 中,你可以在函数声明本身中定义默认值。

不友好写法:

function volume(l, w, h) {
  if (w === undefined)
    w = 3;
  if (h === undefined)
    h = 4;
  return l * w * h;
}

友好写法:

volume = (l, w = 3, h = 4 ) => (l * w * h);
volume(2) //output: 24

加餐:截断数组

如果你想破坏性地从数组末尾删除值,有比使用 splice() 更快的替代方法。

例如,如果你知道原始数组的大小,则可以重新定义其长度属性,如下所示:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array.length = 4;console.log(array); // Result: [0, 1, 2, 3]

这是一个特别简洁的解决方案。但是,我发现 slice() 方法的运行时间更快。如果速度是你的主要目标,请考虑使用以下内容:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.slice(0, 4);console.log(array); 
// Result: [0, 1, 2, 3]

16、Object [key] 好处

你知道 Foo.bar 也可以写成 Foo['bar'] 吗?起初,你似乎没有理由这样写。但是,这种表示法为你提供了编写可重用代码的构建块。

考虑这个验证函数的简化示例:

function validate(values) {
  if(!values.first)
    return false;
  if(!values.last)
    return false;
  return true;
}
console.log(validate({first:'Bruce',last:'Wayne'})); // true

这个函数完美地完成了它的工作。但是,请考虑一个场景,你有很多表单需要应用验证,但具有不同的字段和规则。构建一个可以在运行时配置的通用验证函数不是很好吗?

// object validation rules
const schema = {
  first: {
    required:true
  },
  last: {
    required:true
  }
}
// universal validation function
const validate = (schema, values) => {
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}
console.log(validate(schema, {first:'Bruce'})); // false
console.log(validate(schema, {first:'Bruce',last:'Wayne'})); // true

现在我们有了一个验证函数,我们可以在所有表单中重用,而无需为每个表单编写自定义验证函数。

17、指数幂

它对数学指数幂函数很有用:

不友好写法:

Math.pow(2,3); // 8
Math.pow(2,2); // 4
Math.pow(4,3); // 64

友好写法:

2**3 // 8
2**4 // 4
4**3 // 64

18、将字符串转换为数字

有时你的代码会接收到字符串格式的数据,但需要以数字格式进行处理。这没什么大不了的,我们可以进行快速转换。

不友好写法:

const num1 = parseInt("100");
const num2 =  parseFloat("100.01");

友好写法:

const num1 = +"100"; // converts to int data type
const num2 =  +"100.01"; // converts to float data type

19、Object.entries()

这是 ES8 中引入的一项功能,允许你将文字对象转换为键/值对数组。请参阅下面的示例:

const credits = { producer: 'John', director: 'Jane', assistant: 'Peter' };
const arr = Object.entries(credits);
console.log(arr);
/** Output:
[ [ 'producer', 'John' ],
  [ 'director', 'Jane' ],
  [ 'assistant', 'Peter' ]
]
**/

20、Object.values()

这也是 ES8 中引入的一个新特性,它执行类似于 Object.entries() 的功能,但没有关键部分:

const credits = { producer: 'John', director: 'Jane', assistant: 'Peter' };
const arr = Object.values(credits);
console.log(arr);
/** Output:
[ 'John', 'Jane', 'Peter' ]
**/

加餐:使用 === 而不是 ==

==(或 !=)运算符在需要时执行自动类型转换。===(或 !==)运算符不会执行任何转换。它比较值和类型,这可以被认为比 == 更快。

[10] === 10    // is false
[10]  == 10    // is true
'10' == 10     // is true
'10' === 10    // is false
 []   == 0     // is true
 [] ===  0     // is false
 '' == false   // is true but true == "a" is false
 '' ===   false // is false

另外,请注意,undefined、null、0、false、NaN、''(空字符串)都是假的。

21、按位索引

使用数组执行查找时,indexOf() 函数用于检索你要查找的项目的位置。如果未找到该项目,则返回值 -1。在 JavaScript 中,0 被认为是“假的”,而大于或小于 0 的数字被认为是“真”的。因此,必须像这样编写正确的代码。

不友好写法:

if(arr.indexOf(item) > -1) { // Confirm item IS found
}
if(arr.indexOf(item) === -1) { // Confirm item IS NOT found
}

友好写法:

if(~arr.indexOf(item)) { // Confirm item IS found
}
if(!~arr.indexOf(item)) { // Confirm item IS NOT found
}

按位(~)运算符将返回除 -1 以外的任何值的真值。否定它就像!~一样简单。或者,我们也可以使用 includes() 函数:

if(arr.includes(item)) { // Returns true if the item exists, false //if it doesn't
}

22、对象属性赋值

考虑以下代码:

let fname = { firstName : 'Black' };
let lname = { lastName : 'Panther'}

你如何将它们合并为一个对象?一种方法是编写一个函数,将数据从第二个对象复制到第一个对象上。不幸的是,这可能不是你想要的——你可能需要创建一个全新的对象而不改变任何现有对象。最简单的方法是使用 ES6 中引入的 Object.assign 函数:

let full_names = Object.assign(fname, lname);

你还可以使用 ES8 中引入的对象销毁符号:

let full_names = {...fname, ...lname};

你可以合并的对象属性数量没有限制。如果你确实有具有相同属性名称的对象,则值将按照它们合并的顺序被覆盖。

23、Double Bitwise NOT 速记

按位运算符是你在 JavaScript 初学者教程中学到的功能之一,而且,你永远无法在任何地方实现它们。同意吗?此外,如果你不处理二进制,谁愿意使用 1 和 0?

然而,双位非运算符有一个非常实用的用例。你可以将其用作 Math.floor() 的替代品。Double Bitwise NOT 运算符的优点是它执行相同操作的速度要快得多。您可以在此处阅读有关按位运算符的更多信息。

不友好写法:

Math.floor(4.9) === 4  //true

友好写法:

~~4.9 === 4  //true

24、短路评估

将变量值分配给另一个变量时,你可能希望确保源变量不为空、未定义或为空。你可以编写带有多个条件的长 if 语句,也可以使用短路评估。

不友好写法:

if (variable1 !== null || variable1 !== undefined || variable1 !== '') {
     let variable2 = variable1;
}

友好写法:

const variable2 = variable1  || 'new';

不相信我?自行测试(在es6console中粘贴以下代码):

let variable1;
let variable2 = variable1  || 'bar';
console.log(variable2 === 'bar'); // prints true
variable1 = 'foo';
variable2 = variable1  || 'bar';
console.log(variable2); // prints foo

请注意,如果将 variable1 设置为 false 或 0,将分配值栏。

25、强制参数

默认情况下,如果未传递值(简而言之,未分配任何值),JavaScript 会将函数参数设置为 undefined。其他一些语言会抛出警告或错误。要强制参数分配,你可以使用 if 语句在未定义时抛出错误,或者你可以利用“强制参数速记”。

不友好写法:

function foo(bar) {
  if(bar === undefined) {
    throw new Error('Missing parameter!');
  }
  return bar;
}

友好写法:

mandatory = () => {
  throw new Error('Missing parameter!');
}
foo = (bar = mandatory()) => {
  return bar;
}

加餐:交换两个变量

为了交换两个变量,我们经常使用第三个变量。但是它可以通过数组解构赋值轻松完成。

不友好写法:

let x = "rakshit", y = "shah";
const temp = x;
x = y;
y = temp;

友好写法:

[x,y] = [y,x]

26、将任何东西转换为布尔值

在开发任何代码时,你可能会遇到需要布尔值来比较或进行真/假检查的情况。这种方法在这种情况下会很有用!

const foo = 'some string lines';
const toBool = !!foo
console.log(toBool) // true

27、 将任何东西转换为数字

通过使用 + 运算符,你可以实现它。

const foo = '522'
const toNumber = +foo
console.log(toNumber) // 522
const toNegativeNumber = -foo
console.log(toNegativeNumber) // -522

28、将数组转换为对象

const arr = [ 'foo', 'bar', 1]
const obj = { ...arr }
console.log(obj) // {0: "foo", 1: "bar", 2: 1}

29、删除Array中的重复项

Set 对象允许你存储任何类型的唯一值,无论是原始值还是对象引用。

const arr = ['a', 'b', 'c', 'b', 'd']
const newArr = [... new Set(arr)]
console.log(newArr) // ["a", "b", "c", "d"]

30、经常注释你的代码

通常,开发人员讨厌或忘记为他们开发的函数、算法或代码添加注释。显然,如果你在需要的地方发表评论,这将对你的同行有所帮助。

注释是总结代码片段目的的好方法,可以为你的开发伙伴节省自行确定它所需的时间。

如果代码没有完成,它被注释成完成的任务,它还允许他们捕捉可能的错误。一般来说,最好对每个功能都留下一个注释。

如果你不确定是否应该发表评论,那就去做吧!如果它太杂乱,以后可以随时删除。

当你觉得有些代码缺失或需要在未来完成时,只需添加 TODO 注释即可。

//declares and initializes var x
<script>
var x = 5;
//TODO: Add a function to find factorial of value x.
</script>

结论

我知道还有许多其他技巧和良好做法,因此,如果你有任何要添加的内容,或者你对我分享的内容有任何反馈或更正,请添加评论。

不要自私,请与你的朋友分享知识。

学习更多技能

请点击下方公众号

8e4616470b04c36d0eb248d876746a1f.gif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

30个 JS 实用技巧总结,助你提升工作效率 的相关文章

  • ES6 标记的​​模板函数如何解释它们的参数顺序?

    考虑以下代码 function f console log Array from arguments var x 2 var y 3 f before x y after 论据f将会 根据 Traceur http google githu
  • 不想保留一对一的实体

    假设我有两节课Employee and Department In Employee我已经写了 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name d
  • 使用泛型进行选择排序

    我对整数进行了选择排序并且它正在工作 当我尝试修改程序以使用泛型时 编译器会抱怨 我不知道如何修复它 如果有人能提出一些建议和建设性意见 我将不胜感激 这是代码 public class SelelctionSort public stat
  • jQuery 将所有 href="" 替换为 onclick="window.location="

    所以我有一个很酷的给你 我需要在渲染时扫描我的 html 文档并替换每个 href with onclick window location 不仅如此 我还需要将链接从 href 带到 window location 例如 如果我有 hre
  • 意外标记:使用映射形成对象数组[重复]

    这个问题在这里已经有答案了 我想制作这个 name james age 10 name john age 12 name johnny age 56 我的下面的代码失败了 得到了预期的令牌吗 let x name james age 10
  • PDB.run - 重新启动 pdb 会话

    我对 python 和 pdb 比较陌生 但我对 gdb 有很多经验 我的问题是 如果我在代码中设置了多个断点 我会想要更改一些内容并重新运行我的调试会话并保留这些断点 但是 在我的 pdb 会话中输入 run 会导致我的会话终止并显示以下
  • 从字符串中提取文本 Java

    使用此字符串 ADACADABRA 如何从java中的字符串 ADACADABRA 中提取 CADA 以及如何提取 和 之间的id从下面的链接 http www youtube nocookie com embed zaaU9lJ34c5
  • SecurityContextHolder.getContext().getAuthentication() 返回 null

    我想使用以下代码手动绕过 spring Security 的用户 User localeUser new User UsernamePasswordAuthenticationToken auth new UsernamePasswordA
  • 需要帮助编写扭曲的代理

    我想编写一个简单的代理 可以对请求页面正文中的文本进行打乱 我已经阅读了 stackoverflow 上的部分扭曲文档和其他一些类似的问题 但我有点菜鸟 所以我仍然不明白 我现在就是这样 不知道如何访问和修改页面 from twisted
  • Scapy TCP 校验和重新计算奇怪的行为

    我正在尝试进行 TCP ACK 欺骗 我从 pcap 文件中嗅探一个 ACK 数据包 并在循环中发送它 增加其 ACK 编号以及另一个选项字段 嗅探部分 预欺骗 from scapy all import from struct impor
  • 如何在google colaboratory上使用GPU升级tensorflow

    目前google colaboratory使用tensorflow 1 4 1 我想升级到1 5 0版本 每次当我执行时 pip install upgrade tensorflow命令 notebook实例成功将tensorflow版本升
  • 需要同步仅增量计数器吗?

    我使用整数作为计数器 该整数只会增加 并且肯定有多个线程会同时增加它 当没有其他线程尝试访问其值时 在程序执行结束时读取该计数器的值 我假设我不必为这种仅增量计数器使用锁或任何类型的同步 这是正确的吗 如果这有什么区别的话 我用 Java
  • 从 IntelliJ 运行 JavaFX 应用程序

    Versions openjdk版本 11 0 11 2021 04 20 OpenJDK 运行时环境 build 11 0 11 9 Ubuntu 0ubuntu2 20 10 OpenJDK 64 位服务器虚拟机 内部版本 11 0 1
  • 检查数组中是否有 3 个连续值高于某个阈值

    假设我有一个像这样的 np array a 1 3 4 5 60 43 53 4 46 54 56 78 有没有一种快速方法来获取 3 个连续数字都高于某个阈值的所有位置的索引 也就是说 对于某个阈值th 得到所有x其中 a x gt th
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用
  • 使用 Spring Batch 将文件中的日期解析为 LocalDateTime

    我正在尝试使用 Spring Batch 读取包含日期的 CSV 文件 但在将日期解析为LocalDateTime Object 字段 日期 上的对象 目标 中的字段错误 拒绝值 2017 07 20 04 15 25 0 代码 typeM
  • 使用 JavaScript 更改网址栏中的域名

    有没有办法使用window history pushState或者任何其他js函数来更改地址栏中的整个url 我无法删除根部分 上下文 我的应用程序位于 Heroku 上 网址如下所示http mywebsite herokuapp com
  • Google 地图 v3 信息窗口在地图视口外打开

    如果单击地图视口顶部附近的标记 信息窗口将加载到可视区域之外 并且必须拖动地图才能查看信息窗口内容 理想情况下 我不希望地图自动平移 有没有办法以不同的方向加载信息窗口 例如如果标记位于视口的顶部 则以向下的方向显示信息窗口 不 你不能以不
  • 每次都在django查询数据库中过滤查询集吗?

    想象一下我有以下代码 qs Users objects all list for i in range 10 list append qs filter age i 这里过滤器被调用 10 次 它是连接到数据库 10 次还是第一次使用过滤器
  • 是什么让热部署成为“难题”?

    在工作中 我们经常遇到这样的问题 永久代内存不足 http www jroller com agileanswers entry preventing java s java lang例外 团队负责人认为这是 JVM 中的一个错误 与代码的

随机推荐

  • Journal of Proteome Research

    文献名 Lipidomics reveals similar changes in serum phospholipid signatures of overweight and obese paediatric subjects 用脂质组
  • pytorch1.13安装

    pytorch1 13安装 个人参考 情况交代 安装流程 注意事项 显卡配置查看 创建环境 激活环境 安装对应的torch版本 检查 使用pip list 导入查看 卸载 下载gpu版本的 验证 把这个内核加到jupyter 完成 情况交代
  • 挂载mount问题“wrong fs type, bad option, bad superblock on ”的解决办法

    重装系统后挂载一般会出现如下问题 problem ivy ivy OptiPlex 380 source sudo mount 192 168 9 18 home deep dev env source mount wrong fs typ
  • makefile进阶

    一 微观的C C 编译执行过程 c文件怎么变成可执行文件 exe 1 预处理 E 宏替换 头文件展开 去打印 gcc E hello c o hello i 2 编译 S 把 i 文件编译成汇编代码文件 i gcc S hello i o
  • 火星探险 (Mars)

    暂无链接 题目描述 在2051年 若干火星探险队探索了这颗红色行星的不同区域并且制作了这些区域的地图 现在 Baltic空间机构有一个雄心勃勃的计划 他们想制作一张整个行星的地图 为了考虑必要的工作 他们需要知道地图上已经存在的全部区域的大
  • canvas画布组件

    代码编写 在画布上添加各种几何图形 from tkinter import root Tk 设置主窗口区的背景顔色以区别画布区的顔色 root config bg 8DB6cD root title 基于tk的canvas几何图形 root
  • 附录2 高斯分布与马氏距离

    给定随机变量 xi i 1 N x i i 1
  • 深度学习优化器

    1 什么是优化器 优化器用来寻找模型的最优解 2 常见优化器 2 1 批量梯度下降法BGD Batch Gradient Descent 2 1 1 BGD表示 BGD 采用整个训练集的数据来计算 cost function 对参数的梯度
  • Vue技术 Object.defineProperty

    Object defineProperty 是JavaScript中的一个内置方法 用于定义或修改对象的属性 它接受三个参数 对象 属性名 以及一个属性描述符对象 属性描述符对象有两种形式 数据描述符和访问描述符 数据描述符用于定义普通属性
  • 【蓝桥杯】Java组必备API类 --快速读写实现方法 及输入输出的巧妙处理

    输入和输出 输入 Scanner s new Scanner System in 声明一个从控制台中读入数据的对象 int x s nextInt double x s nextDouble String x s next 无法读入空格 S
  • 统计和——前缀和

    题目大概 给定一个长度为n的整数数组和一个整数k 你需要找到该数组中和为k的连续子数组的个数 测试样例 输入 5 3 1 1 2 1 1 输出 2 思路1 利用for循环暴力枚举子数组 并且求和 计数 时间复杂度为O n 3 如果数据大于了
  • 毕设系列 - stm32机器视觉的口罩佩戴检测系统 - 单片机 物联网 嵌入式

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 设计原理 5 部分核心代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉
  • 桶排序 (详细图解)

    一 桶排序 桶排序 Bucket sort 或所谓的箱排序 是一个排序算法 工作的原理是将数组分到有限数量的桶里 每个桶再个别排序 有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序 最后依次把各个桶中的记录列出来记得到有序序列
  • 攻防世界web之ics-06

    打开网址 四处点击 点到报表中心 跳转新页面 查看源码也没有什么特别的 发现URL栏有 id 1 以为是sql注入 但是并不是 查看大佬的wp 发现这题采用brupsuite爆破 先将抓到的包放到Intruder 然后将id设为变量 然后把
  • WEB自动化测试面试题及答案大全

    1 Selenium是否支持桌面应用软件的自动化测试 Selenium不支持桌面软件的自动化测试 Selenium是根据网页元素的属性才定位元素 而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素 当然现在也有根据桌面元素的属性来定
  • type_traits

    概述 type traits提供了丰富的编译期间计算 查询 判断 转换和选择的帮助类 其被定义在 include
  • React-50:setState

    对象形式 也是最经常用到的 import React Component from react export default class Demo extends Component state count 0 add gt 对象式的set
  • 计算机网络学习笔记四、http和https

    http和https 从本篇文章开始总结http协议相关的知识点 http协议相关的内容可以分为四个部分 HTTP报文 HTTP请求 HTTP发展历史 HTTPS 1 HTTP报文 HTTP全称Hyper Text Transfer Pro
  • 数据库连接出错?

    数据库连接为什么会出错呢 NO suitable driver found for jdbc 问题源有3 1 连接的url的格式有错 Connection conn DriverManager getConnection jdbc sqls
  • 30个 JS 实用技巧总结,助你提升工作效率

    英文 https javascript plainenglish io 35 javascript short hands coding methodologies 28ea2d7d0a5e 翻译 杨小二 我是Rakshit Shah 我在