我在函数params
中有一个变量someFunction()
,
function someFunction() {
var params = ""
params += "type=" + type + "&intro=" + intro + "&val=" + val; // then I add a value on params
console.log(params.val); // now, how can i do this?
}
有什么想法吗?
答案 0 :(得分:2)
您的params
变量仅为string
。您要做的是像object
一样访问它。
更好的解决方案是:
// Create an object
var params = {};
// Create the properties
params.type = "some type";
params.val = "some value";
params.intro = "some intro";
// Alternatively
var params = {
type: "some type",
val: "some value",
intro: "some intro"
};
// Function that does something with your params
function doSomething(input) {
console.log(input.val);
}
// Function that converts your object to a query string
function toQueryString(input) {
var keyValuePairs = [];
for (var key in input) {
if (input.hasOwnProperty(key)) {
keyValuePairs.push(encodeURI(key) + "=" + encodeURI(input[key]));
}
}
return keyValuePairs.join("&");
}
doSomething(params);
console.log(toQueryString(params));
输出
一些价值
型=一些%20type&安培; VAL =一些%20value&安培;介绍=一些%20intro
作为旁注,在代码中或将来使用可能是关键字的单词通常是个坏主意(IE:params
)。更好的名称是提供信息的名称,例如welcomeMessage
,introduction
或employee
(基于您列出的3个值)
答案 1 :(得分:2)
当它是一个字符串时,它是一个字符串。您可以解析它以根据已知格式获取值,但无法在字符串中引用 。
因此,最好将params存储在对象中以供以后使用,并在需要时根据该对象创建字符串。
所以,它可能是这样的:
var params = {
val: val,
type: type,
intro: intro
};
然后,params.val
将可访问。当您需要字符串时,您需要var string = "type=" + params.type + "&intro=" + params.intro + "&val=" + params.val;
答案 2 :(得分:2)
最好编写自定义函数。 这是我尝试过的。
window.onload = function() {
var params = "";
var type = "types";
var intro = "int";
var val = "values";
params += "type=" + type + "&intro=" + intro + "&val=" + val;
var convertToObject = function(strParams) {
var objQueryString = {};
var arrParam = strParams.split('&');
console.log(arrParam)
arrParam.forEach(function(value, key) {
var arrKyValue = value.split('=');
objQueryString[arrKyValue[0]] = arrKyValue[1];
})
return objQueryString;
}
objParams = convertToObject(params);
console.log(objParams.val, objParams["val"])
}
这是Plunker
答案 3 :(得分:0)
var params = ""
不是一个函数,它是一个声明。 JS中的函数是使用function(params) = {}
创建的,或者在ES6中可以使用=>
。当你在一个刺痛上使用+=
时,你会说“把所有已经存在于params中的字符串添加到它上面,我将告诉你什么。”在评估语句后,您有一个新字符串。尽管可以像数组那样访问字符串,例x = 'hello'
然后x[0]
将返回'h',其中0表示字符串索引处的字符。您正在尝试使用用于JS对象文字的点表示法,例如x = {prop1: 200, prop2: 300}
然后x.prop1
将返回200.或者使用数组语法代替x[prop1]
。
答案 4 :(得分:0)
这样做,请查看演示 - fiddle:
var value = false, temp;
params.split('&').forEach( function(item) {
temp = item.split('=');
if(temp[0] === 'val') {
value = temp[1];
}
})
console.log(value);