如何检索存储在变量中的字符串?

时间:2016-01-28 04:07:41

标签: javascript

我在函数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?
}

有什么想法吗?

5 个答案:

答案 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)。更好的名称是提供信息的名称,例如welcomeMessageintroductionemployee(基于您列出的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);