原始类型(Number,String等)按值传递,但是对象是未知的,因为它们可以是值传递(如果我们认为持有对象的变量实际上是对象的引用)并且通过引用传递(当我们认为对象的变量保存对象本身时).
虽然最后并不重要,但我想知道提交传递约定的参数的正确方法是什么.是否有JavaScript规范的摘录,它定义了与此相关的语义?
我有一个对象:
myObject = { 'a': 1, 'b': 2, 'c': 3 }
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个本机方法,类似于Array.prototype.map将使用如下:
newObject = myObject.map(function (value, label) {
return value * value;
});
// newObject is now { 'a': 1, 'b': 4, 'c': 9 }
Run Code Online (Sandbox Code Playgroud)
JavaScript是否具有map对象的这种功能?(我想将它用于Node.JS,所以我不关心跨浏览器问题.)
我在Node.js模块中找到了以下合同:
module.exports = exports = nano = function database_module(cfg) {...}
Run Code Online (Sandbox Code Playgroud)
我不知道什么之间的不同module.exports和exports为什么都被用在这里.
我有一个问题,我在控制器中的范围初始化变量.然后在用户登录时在另一个控制器中进行更改.此变量用于控制导航栏等内容,并根据用户类型限制对站点部分的访问,因此保持其值非常重要.它的问题在于初始化它的控制器,通过角度再次调用,然后将变量重置为其初始值.
我认为这不是声明和初始化全局变量的正确方法,它不是真正的全局变量,所以我的问题是什么是正确的方法,是否有任何关于使用当前版本的角度工作的好例子?
如何在JS中通过引用传递变量?我有3个变量,我想要执行几个操作,所以我想将它们放在for循环中并对每个变量执行操作.
伪代码:
myArray = new Array(var1, var2, var3);
for (var x = 0; x < myArray.length; x++){
//do stuff to the array
makePretty(myArray[x]);
}
//now do stuff to the updated vars
Run Code Online (Sandbox Code Playgroud)
做这个的最好方式是什么?
可能重复:
在javascript中按值复制数组
我有一个有趣的JavaScript问题.我复制一个数组变量只对副本进行修改,然后拼接副本删除一个元素.但是原始数组变量受到拼接的影响 - 就好像副本是'按引用复制':
window.onload = function() {
var initial_variable = ['first', 'second', 'third'];
var copy_initial_variable = initial_variable;
copy_initial_variable.splice(0, 1);
alert('initial variable - ' + initial_variable);
};
//output: initial variable - second,third
Run Code Online (Sandbox Code Playgroud)
首先,这是javascript的故意行为还是一个bug?
其次,我如何制作数组的副本并删除副本中的元素但不能删除原始元素?
有一件事让我觉得以上可能是一个javascript错误,这种行为只发生在数组而不是整数.例如:
window.onload = function() {
var initial_variable = 1;
var copy_initial_variable = initial_variable;
copy_initial_variable = 2;
alert('initial variable - ' + initial_variable);
};
//output: initial variable - 1
Run Code Online (Sandbox Code Playgroud)
如果行为是一致的,那么这应该输出,2因为分配可能是参考?
如果我的问题听起来很愚蠢,我深表歉意,但我发现在许多情况下我需要在许多文件中使用全局变量,例如代表数据库和 redis 客户端的变量,但是这些变量本身需要等待从 promises 或 async 中获取它们的值初始化与数据库或 redis 服务器的通信的函数。
我想做这样的事情
init.js:
export default async () => {
return await initializeWhatever()
}
Run Code Online (Sandbox Code Playgroud)
数据库.js:
import init from './init'
let db = null
init().then(val => db = val)
export default db
Run Code Online (Sandbox Code Playgroud)
api.js:
import db from './db'
const doApi = req => {
db('users').select({username:req.param.username})
}
Run Code Online (Sandbox Code Playgroud)
但是db导入的变量api.js始终为空,为什么在init()完成时它没有更新为正确的值?如果我使用 db 的方法是错误的,那么导出异步计算的全局变量的正确方法是什么?
我发现JavaScript的一些奇怪的行为,将变量作为参数传递给函数,这里是片段:
var notWorks = {
aa: "string",
}
function why() {
var thisWorks = notWorks;
$.get("/echo/json").then(function() {
printVal(notWorks);
printVal(thisWorks);
});
notWorks = {};
}
function printVal(val) {
console.log(val);
}
why();
Run Code Online (Sandbox Code Playgroud)
输出是:
Object { }
Object { aa: "string" }
Run Code Online (Sandbox Code Playgroud)
对于变量notWorks,一切都很清楚 - 当变量已经被清除时,调用then()中的函数.但是为什么如果我将这个对象设置为一个新变量,它会保存变量的初始值?对象通过链接传递给功能,不是吗?
我现在正在编写一些脚本,但在尝试否定函数内的布尔值时遇到了问题。我的意思是:
var test = true;
function changeThisBoolPlease(asd){
asd=!asd;
}
alert(test);
changeThisBoolPlease(test);
alert(test);
Run Code Online (Sandbox Code Playgroud)
警报为真,然后为真。
有任何想法吗?JS 引用不是很完美吗?
编辑:
好的,这只是我功能的一部分:
function przesun(kolor, figury, castlings, x1, y1, x2, y2, strona) {
kolor = nowaPozycjaKolor(kolor,x1, y1, x2, y2);
figury = nowaPozycjaFigur(figury,x1, y1, x2, y2);
strona = !strona;
}
Run Code Online (Sandbox Code Playgroud)
实际上我不能返回这个值。如何?
javascript ×8
node.js ×2
angularjs ×1
boolean ×1
commonjs ×1
es6-modules ×1
export ×1
java ×1
map-function ×1
methods ×1
negate ×1
variables ×1