Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检索存储在变量中的字符串?_Javascript - Fatal编程技术网

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
上的一个属性。我感谢大家帮助我并给出答案,但这一个给了我这样的解决方案