Javascript 如何检索存储在变量中的字符串?
我在函数Javascript 如何检索存储在变量中的字符串?,javascript,Javascript,我在函数someFunction()中有一个变量params 有什么想法吗?您的params变量只是一个字符串。您试图做的是像访问对象一样访问它 更好的解决办法是: // Create an object var params = {}; // Create the properties params.type = "some type"; params.val = "some value"; params.intro = "some intr
someFunction()
中有一个变量params
有什么想法吗?您的
params
变量只是一个字符串。您试图做的是像访问对象一样访问它
更好的解决办法是:
// 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));
输出
一些价值
type=some%20type&val=some%20value&intro=some%20intro
作为旁注,在代码中或将来使用可能成为关键字的单词通常是一个坏主意(即:params
)。更好的名称应该是一个信息丰富的名称,例如welcomeMessage
、introduction
或employee
(基于您列出的3个值)您的params
变量只是一个字符串。您试图做的是像访问对象一样访问它
更好的解决办法是:
// 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));
输出
一些价值
type=some%20type&val=some%20value&intro=some%20intro
作为旁注,在代码中或将来使用可能成为关键字的单词通常是一个坏主意(即:params
)。更好的名称应该是信息丰富的名称,例如welcomeMessage
,简介
或员工
(基于您列出的3个值)如果是字符串,则是字符串。您可以根据已知格式对其进行解析以获取值,但无法引用字符串内部的内容
因此,最好将参数存储在对象中供以后使用,并仅在需要时基于该对象创建字符串
所以,可能是这样的:
var params = {
val: val,
type: type,
intro: intro
};
然后,params.val
将可访问。当您需要字符串时,您需要执行var string=“type=“+params.type+”&intro=“+params.intro+”&val=“+params.val代码>当它是一个字符串时,它就是一个字符串。您可以根据已知格式对其进行解析以获取值,但无法引用字符串内部的内容
因此,最好将参数存储在对象中供以后使用,并仅在需要时基于该对象创建字符串
所以,可能是这样的:
var params = {
val: val,
type: type,
intro: intro
};
然后,params.val
将可访问。当您需要字符串时,您需要执行var string=“type=“+params.type+”&intro=“+params.intro+”&val=“+params.val
var params=”“
不是函数,而是语句。JS中的函数是使用函数(params)={}
创建的,或者在ES6中可以使用=>
。当你在sting上使用+=
时,你说的是“取params中已经存在的字符串,并将我要告诉你的内容添加到该字符串中。”对语句求值后,你会得到一个新字符串。尽管可以像数组一样访问字符串,例如x='hello'
,然后x[0]
将返回'h',其中0表示字符串索引处的字符。您正在尝试使用点表示法,它用于JS对象文本,例如x={prop1:200,prop2:300}
然后x.prop1
将返回200。或者使用数组语法执行x[prop1]
。var params=“”
不是函数,而是语句。JS中的函数是使用函数(params)={}
创建的,或者在ES6中可以使用=>
。当你在sting上使用+=
时,你说的是“取params中已经存在的字符串,并将我要告诉你的内容添加到该字符串中。”对语句求值后,你会得到一个新字符串。尽管可以像数组一样访问字符串,例如x='hello'
,然后x[0]
将返回'h',其中0表示字符串索引处的字符。您正在尝试使用点表示法,它用于JS对象文本,例如x={prop1:200,prop2:300}
然后x.prop1
将返回200。或者使用数组语法,您可以改为执行x[prop1]
。最好编写自定义函数。
这是我试过的
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"])
}
下面是编写自定义函数的更好方法。
这是我试过的
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"])
}
这里是这样做,检查演示-:
这样做,检查演示-:
您不能像那样访问它……您使用的方法是通过提及密钥来访问对象的属性。您将字符串作为输入,而不是object
“params”变量由字符串作为值组成。要获取“val”的值,请使用Slice、Substring或Substr函数。@RayonDabre问题不在于params
是字符串,而不是对象,问题在于属性访问在原型链上工作,不在字符串的内部内容上。这意味着,params[“val”]
将从params
访问属性val
,但在给定示例中它不是现有属性,它只是字符串内容的一部分<但是,code>params[“split”]
可以工作,因为split
是String.prototype
上的一个属性。您可能无法像那样访问它。您使用的方法是通过提及键来访问对象的属性。您将字符串作为输入,而不是object
“params”变量由字符串作为值组成。要获取“val”的值,请使用Slice、Substring或Substr函数。@RayonDabre问题不在于params
是字符串,而不是对象,问题在于属性访问在原型链上工作,不在字符串的内部内容上。这意味着,params[“val”]
将从params
访问属性val
,但在给定示例中它不是现有属性,它只是字符串内容的一部分params[“split”]
,但是,它是有效的,因为split
是String.prototype
上的一个属性。我感谢大家帮助我并给出答案,但这一个给了我这样的解决方案