javascript传参数有哪些

1.隐式创建 html 标签

这种方法一般配合 ajax,上面的 value 使用了模板引擎

2.window['data']

window["name"] = "the window object";

3.使用 localStorage,cookie 等存储

window.localStorage.setItem("name", "xiaoyueyue");

window.localStorage.getItem("name");

特点:cookie,localStorage,sessionStorage,indexDB

特性 cookie localStorage sessionStorage indexDB

数据生命周期 一般由服务器生成 除非被清理,否则一直存在 页面关闭就清理 除非被清理,否则一直存在

可以设置过期时间 

数据存储大小 4K 5M 5M 无限

与服务端通信 每次都会携带在 header 中 不参与 不参与 不参与

,对于请求性能影响

4.获取地址栏方法

function parseParam(url) {

  var paramArr = decodeURI(url)

      .split("?")[1]

      .split("&"),

    obj = {};

  for (var i = 0; i < paramArr.length; i++) {

    var item = paramArr[i];

    if (item.indexOf("=") != -1) {

      var tmp = item.split("=");

      obj[tmp[0]] = tmp[1];

    } else {

      obj[item] = true;

    }

  }

  return obj;

}

(2.正则表达式方法

function GetQueryString(name) {

  var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");

  var r = window.location.search.substr(1).match(reg);

  if (r != null) return unescape(r[2]);

  return null;

}

5.标签绑定函数传参

6.HTML5 data-* 自定义属性

var box = document.createElement("p");

box.innerHTML ="";

document.body.appendChild(box);

// name,age,friend

function alertInfo(data) {

  alert(

    "大家好,我是" +

      data.name +

      ", 我今年" +

      data.age +

      "岁了,我的好朋友是" +

      data.friend +

      " !"

  );

}

7.字符串传参

var data = [

  {

    name: "xiaoyueyue",

    age: "25",

    home: "shanxi",

    friend: "heizi"

  }

];

var box = document.createElement("p"),

  html = "";

for (var i = 0; i < data.length; i++) {

  html +=

    "";

}

box.innerHTML = html;

document.body.appendChild(box);

function alertInfo(id, name, age, home, friend) {

  alert("我是 " + name + " , " + friend + " 是我的好朋友");

}

8.arguments

function fenpei() {

  var args = Array.prototype.slice.call(arguments);

  alert("我是" + args[2] + "油品,数量为 " + args[1] + " 吨, id为 " + args[0]);

}

9.form 表单

// form表单序列化,摘自JS高程

function serialize(form) {

  var parts = [],

    field = null,

    i,

    len,

    j,

    optLen,

    option,

    optValue;

  for (i = 0, len = form.elements.length; i < len; i++) {

    field = form.elements[i];

    switch (field.type) {

      case "select-one":

      case "select-multiple":

        if (field.name.length) {

          for (j = 0, optLen = field.options.length; j < optLen; j++) {

            option = field.options[j];

            if (option.selected) {

              optValue = "";

              if (option.hasAttribute) {

                optValue = option.hasAttribute("value")

                  ? option.value

                  : option.text;

              } else {

                optValue = option.attributes["value"].specified

                  ? option.value

                  : option.text;

              }

              parts.push(

                encodeURIComponent(field.name) +

                  "=" +

                  encodeURIComponent(optValue)

              );

            }

          }

        }

        break;

      case undefined: //fieldset

      case "file": //file input

      case "submit": //submit button

      case "reset": //reset button

      case "button": //custom button

        break;

      case "radio": //radio button

      case "checkbox": //checkbox

        if (!field.checked) {

          break;

        }

      /* falls through */

      default:

        //don't include form fields without names

        if (field.name.length) {

          parts.push(

            encodeURIComponent(field.name) +

              "=" +

              encodeURIComponent(field.value)

          );

        }

    }

  }

  return parts.join("&");

}

使用:

document.querySelector("button").onclick = function() {

  console.log("param: " + serialize(document.getElementById("formData"))); // param: ordersaleCode=&extractType=0

};

10. 发布订阅处理复杂逻辑传参

  10.1方法源码

var Event = (function() {

  var clientList = {},

    pub,

    sub,

    remove;

  var cached = {};

  sub = function(key, fn) {

    if (!clientList[key]) {

      clientList[key] = [];

    }

    // 使用缓存执行的订阅不用多次调用执行

    cached[key + "time"] == undefined ? clientList[key].push(fn) : "";

    if (cached[key] instanceof Array && cached[key].length > 0) {

      //说明有缓存的 可以执行

      fn.apply(null, cached[key]);

      cached[key + "time"] = 1;

    }

  };

  pub = function() {

    var key = Array.prototype.shift.call(arguments),

      fns = clientList[key];

    if (!fns || fns.length === 0) {

      //初始默认缓存

      cached[key] = Array.prototype.slice.call(arguments, 0);

      return false;

    }

    for (var i = 0, fn; (fn = fns[i++]); ) {

      // 再次发布更新缓存中的 data 参数

      cached[key + "time"] != undefined

        ? (cached[key] = Array.prototype.slice.call(arguments, 0))

        : "";

      fn.apply(this, arguments);

    }

  };

  remove = function(key, fn) {

    var fns = clientList[key];

    // 缓存订阅一并删除

    var cachedFn = cached[key];

    if (!fns && !cachedFn) {

      return false;

    }

    if (!fn) {

      fns && (fns.length = 0);

      cachedFn && (cachedFn.length = 0);

    } else {

      if (cachedFn) {

        for (var m = cachedFn.length - 1; m >= 0; m--) {

          var _fn_temp = cachedFn[m];

          if (_fn_temp === fn) {

            cachedFn.splice(m, 1);

          }

        }

      }

      for (var n = fns.length - 1; n >= 0; n--) {

        var _fn = fns[n];

        if (_fn === fn) {

          fns.splice(n, 1);

        }

      }

    }

  };

  return {

    pub: pub,

    sub: sub,

    remove: remove

  };

})();

在微信小程序中使用的例子:

// app.js

App({

  onLaunch: function(e) {

    // 注册 storage,这是第二条

    wx.Storage = Storage;

    // 注册发布订阅模式

    wx.yue = Event;

  }

});

使用实例

// 添加收货地址页面订阅

onLoad: function (options) {

        wx.yue.sub("addAddress", function (data) {

            y.setData({

                addAddress: data

            })

        })

}

/**

* 生命周期函数--监听页面隐藏

*/

onHide: function () {

    // 取消多余的事件订阅

    wx.Storage.removeItem("addAddress");

},

onUnload: function () {

    // 取消多余的事件订阅

    wx.yue.remove("addAddress");

}

// 传递地址页面获取好数据传递

wx.yue.pub("addAddress", data.info);

// 补充跳转返回

你可能感兴趣的:(javascript传参数有哪些)