js里js怎么定义mapp应该怎么写

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
一直以来对JavaScript中创建数组有几种方式,每种创建方式的区别,JavaScript中map的创建方式及其使用认识的不是很清楚,还好利用周末自己看了点资料并写了几个小例子,以此来加深自己对JS中的Array和Map的认识,以后在项目中遇到就可以完全知晓了。
直接点,上代码!代码比较简单,并且代码中加有注释,希望能够帮助加深理解。
说明:array.html中是Array创建及使用的例子,array-map.html中是map与array间关系及其间转化的例子
array.html文件:
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&
&meta http-equiv="Content-Type" content="text/ charset=utf-8"&
&title&Array 测试&/title&
&script language="JavaScript1.2"&
//1.定义一个初始容量为0的数组(数组中没有任何元素)
document.write("-------------------------------"+'&br/&');
var myarray = new Array();
document.write("new Array()方式初始的数组的初始容量为:"+myarray.length+"&br/&");
myarray[0]="new Array() 1";
myarray[1]="new Array() 2";
myarray.push("new Array() 3","new Array() 4");
for(var i=0;i&myarray.i++){
document.write(myarray[i]+'&br/&');
document.write("-------------------------------"+'&br/&');
///////////////////////////////////////////////////////////////////////
//2.定义数组时,指定初始化数组的大小(数组中没有任何元素)
//此处定义的arry1数组的大小是3,但我们可以向其添加
//任意多的元素(此例中,arry1数组的元素个数是8)
var arry1 = new Array(3);//定义一个初始容量为3的数组
document.write("new Array(3)方式初始的数组的初始容量为:"+arry1.length+"&br/&");
arry1[0]="array1";
arry1[1]="array2";
arry1[2]="array3";
arry1[3]="array4";
arry1[4]="array5";
//向arry1数组的末尾添加一个元素,并返回数组arry1的新的长度
arry1.push("array6");
//可以通过push向arry1数组中一次添加多个数组元素
arry1.push("array7","array8");
for(var x in arry1){
document.write(arry1[x]+'&br/&');
document.write("arry1.length="+arry1.length+"&br/&");
//3.定义数组时,并为数组赋初值(数组大小等于初始值的个数)
document.write("-----------------------------");
var arraytest = new Array("arraytest1","arraytest2","arraytest3");
document.write("new Array(arraytest1,arraytest2,arraytest3)方式初始的数组的初始容量为:"+arraytest.length+"&br/&");
arraytest[3]="arraytest4";
//向arry1数组的末尾添加一个元素,并返回数组arry1的新的长度
arraytest.push("arraytest5");
//可以通过push向arry1数组中一次添加多个数组元素
arraytest.push("arraytest6","arraytest7");
for(var x in arraytest){
document.write(arraytest[x]+'&br/&');
document.write("------------不使用new 关键字创建数组-----------------"+"&br/&");
//4.不使用new 关键字定义数组的方式
document.write("var x=[];方式创建的数组的初始容量为:"+x.length+"&br/&");
x.push("中国人","美国人","日本人");
for(var key in x){
document.write(x[key]+'&br/&');
var y=[45,67,89,890];
document.write("var y=[45,67,89,890];方式创建的数组的初始容量为:"+y.length+"&br/&");
for(var key in y){
document.write(y[key]+'&br/&');
//总结:无论通过哪种方式创建的数组,你可以添加任意多的值,就像你可以定义你需要的任意多的变量一样。
//注意:如果你需要在数组内指定数值或者逻辑值,那么变量类型应该是数值变量或者布尔变量,而不是字符变量。
document.write("-------------数组中的元素是数值-------------"+'&br/&');
var arrayInts= new Array(1,2,3,4,5,6,7);
for(var x in arraytest){
document.write(arrayInts[x]+'&br/&');
document.write("-------------数组中的元素是逻辑值-------------"+'&br/&');
var arrayBooleans= new Array(true,false,true,false);
for(var x in arrayBooleans){
document.write(arrayBooleans[x]+'&br/&');
array-map.html文件:
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&
&title&Array作Map使用方式&/title&
&meta http-equiv="content-type" content="text/ charset=UTF-8"&
&script language="JavaScript1.2"&
var map1={};
map1['张三']="028-77777";
map1['李四']="";
map1['王五']="";
document.write("map1['李四']="+map1['李四']+"&br/&");
//清空map1中的所有键和值
document.write("map1['李四']="+map1['李四']+"&br/&");
document.write("------------------------"+"&br/&");
var map2=new Array();
map2['张三']="028-77777";
map2['李四']="";
map2['王五']="";
document.write("map2的大小是:"+map2.length+"&br/&");//这里map2.length显示为0
document.write("map2['李四']="+map2['李四']+"&br/&");
document.write("------------------------"+"&br/&");
map2[0] = "";
map2[1] = "";
map2[2] = "";
document.write("map2的大小是:"+map2.length+"&br/&");//这里map2.length显示为3
document.write("map2['1']="+map2['1']+"&br/&");
document.write("map2[1]="+map2[1]+"&br/&");
for(var i=0;i&map2.i++)
document.write(map2[i]+"&br/&");
document.write("------------------------"+"&br/&");
var map3={"姓名":"张三","性别":"女","年龄":26};
//动态向map3中添加key和value值,方式一:
map3.婚否="已婚";//此种动态添加map的key和value的方式对添加的map的key标识符的命名有限制:只能以字符开头(字符中不包括"-")
//例如:map3.-婚否="已婚";或map3.4婚否="已婚";添加的key,js都会报错
//动态向map3中添加key和value值,方式二:
//注意:这种方式可以用任意串做map的键.如下:
map3["民族"]="汉族";
map3["1-2"]="身高";
map3["-9"]="体重";
document.write(map3["1-2"]+"&br/&");
document.write(map3["-9"]+"&br/&");
document.write(map3.婚否+"&br/&");
document.write("------------遍历map3中所有键及其值-----------"+"&br/&");
for(var key in map3){
document.write("map3["+key+"]="+map3[key]+"&br/&");
//使用自定义的属性的数组
document.write("------------使用自定义的属性的数组-----------"+"&br/&");
var a=new Array();
a[0].姓名="张三";
a[0].年龄=26;
a[0].民族="汉族";
a[1].姓名="李四";
a[1].年龄=28;
a[1].民族="回族";
for(var i=0;i&a.i++)
document.write(a[i].姓名+":"+a[i].年龄+":"+a[i].民族+"&br/&");
document.write("------------移除a[0]数组后-----------"+"&br/&");
a.pop(0);//移除下标为0的数组元素
//a[0]={};//此种方式是清除下标为0的数组中的值,但并没有移除下标为0的数组元素
for(var i=0;i&a.i++)
document.write(a[i].姓名+":"+a[i].年龄+":"+a[i].民族+"&br/&");
下载次数: 15
duqiangcise
浏览: 448627 次
来自: 成都
谢了谢了 就是要找这个问题
赞一个! 谢谢分享
后面的异常为什么出现?好像没说清楚!
顶一个,现在明白了...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'JavaScript Source Map 详解 - 阮一峰的网络日志
JavaScript Source Map 详解
上周,发布。
这是2.0版之前的最后一个新版本,有很多新功能,其中一个就是支持Source Map。
访问 ,打开压缩后的版本,滚动到底部,你可以看到最后一行是这样的:
  //@ sourceMappingURL=jquery.min.map
这就是Source Map。它是一个独立的map文件,与源码在同一个目录下,你可以,看看它的样子。
这是一个很有用的功能,本文将详细讲解这个功能。
一、从源码转换讲起
JavaScript脚本正变得越来越复杂。大部分源码(尤其是各种函数库和框架)都要经过转换,才能投入生产环境。
常见的源码转换,主要是以下三种情况:
  (1)压缩,减小体积。比如jQuery 1.9的源码,压缩前是252KB,压缩后是32KB。
  (2)多个文件合并,减少HTTP请求数。
  (3)其他语言编译成JavaScript。最常见的例子就是CoffeeScript。
这三种情况,都使得实际运行的代码不同于开发代码,除错(debug)变得困难重重。
通常,JavaScript的解释器会告诉你,第几行第几列代码出错。但是,这对于转换后的代码毫无用处。举例来说,jQuery 1.9压缩后只有3行,每行3万个字符,所有内部变量都改了名字。你看着报错信息,感到毫无头绪,根本不知道它所对应的原始位置。
这就是Source map想要解决的问题。
二、什么是Source map
简单说,Source map就是一个信息文件,里面储存着位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置。
有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码。这无疑给开发者带来了很大方便。
目前,暂时只有Chrome浏览器支持这个功能。在Developer Tools的Setting设置中,确认选中"Enable source maps"。
三、如何启用Source map
正如前文所提到的,只要在转换后的代码尾部,加上一行就可以了。
  //@ sourceMappingURL=/path/to/file.js.map
map文件可以放在网络上,也可以放在本地文件系统。
四、如何生成Source map
最常用的方法是使用Google的。
生成命令的格式如下:
  java -jar compiler.jar \
    --js script.js \
    --create_source_map ./script-min.js.map \
    --source_map_format=V3 \
    --js_output_file script-min.js
各个参数的意义如下:
  - js: 转换前的代码文件
  - create_source_map: 生成的source map文件
  - source_map_format:source map的版本,目前一律采用V3。
  - js_output_file: 转换后的代码文件。
其他的生成方法可以参考。
五、Source map的格式
打开Source map文件,它大概是这个样子:
    version : 3,
    file: "out.js",
    sourceRoot : "",
    sources: ["foo.js", "bar.js"],
    names: ["src", "maps", "are", "fun"],
    mappings: "AAgBC,SAAQ,CAAEA"
整个文件就是一个JavaScript对象,可以被解释器读取。它主要有以下几个属性:
  - version:Source map的版本,目前为3。
  - file:转换后的文件名。
  - sourceRoot:转换前的文件所在的目录。如果与转换前的文件在同一目录,该项为空。
  - sources:转换前的文件。该项是一个数组,表示可能存在多个文件合并。
  - names:转换前的所有变量名和属性名。
  - mappings:记录位置信息的字符串,下文详细介绍。
六、mappings属性
下面才是真正有趣的部分:两个文件的各个位置是如何一一对应的。
关键就是map文件的mappings属性。这是一个很长的字符串,它分成三层。
  第一层是行对应,以分号(;)表示,每个分号对应转换后源码的一行。所以,第一个分号前的内容,就对应源码的第一行,以此类推。
  第二层是位置对应,以逗号(,)表示,每个逗号对应转换后源码的一个位置。所以,第一个逗号前的内容,就对应该行源码的第一个位置,以此类推。
  第三层是位置转换,以表示,代表该位置对应的转换前的源码位置。
举例来说,假定mappings属性的内容如下:
  mappings:"AAAAA,BBBBB;CCCCC"
就表示,转换后的源码分成两行,第一行有两个位置,第二行有一个位置。
七、位置对应的原理
每个位置使用五位,表示五个字段。
从左边算起,
  - 第一位,表示这个位置在(转换后的代码的)的第几列。
  - 第二位,表示这个位置属于sources属性中的哪一个文件。
  - 第三位,表示这个位置属于转换前代码的第几行。
  - 第四位,表示这个位置属于转换前代码的第几列。
  - 第五位,表示这个位置属于names属性中的哪一个变量。
有几点需要说明。首先,所有的值都是以0作为基数的。其次,第五位不是必需的,如果该位置没有对应names属性中的变量,可以省略第五位。再次,每一位都采用VLQ编码表示;由于VLQ编码是变长的,所以每一位可以由多个字符构成。
如果某个位置是AAAAA,由于A在VLQ编码中表示0,因此这个位置的五个位实际上都是0。它的意思是,该位置在转换后代码的第0列,对应sources属性中第0个文件,属于转换前代码的第0行第0列,对应names属性中的第0个变量。
八、VLQ编码
最后,谈谈如何用表示数值。
这种编码最早用于MIDI文件,后来被多种格式采用。它的特点就是可以非常精简地表示很大的数值。
VLQ编码是变长的。如果(整)数值在-15到+15之间(含两个端点),用一个字符表示;超出这个范围,就需要用多个字符表示。它规定,每个字符使用6个两进制位,正好可以借用编码的字符表。
在这6个位中,左边的第一位(最高位)表示是否"连续"(continuation)。如果是1,代表这6个位后面的6个位也属于同一个数;如果是0,表示该数值到这6个位结束。
  Continuation
  |     Sign
  |     |
  V     V
  101011
这6个位中的右边最后一位(最低位)的含义,取决于这6个位是否是某个数值的VLQ编码的第一个字符。如果是的,这个位代表"符号"(sign),0为正,1为负(Source map的符号固定为0);如果不是,这个位没有特殊含义,被算作数值的一部分。
九、VLQ编码:实例
下面看一个例子,如何对数值16进行VLQ编码。
  第一步,将16改写成二进制形式10000。
  第二步,在最右边补充符号位。因为16大于0,所以符号位为0,整个数变成100000。
  第三步,从右边的最低位开始,将整个数每隔5位,进行分段,即变成1和00000两段。如果最高位所在的段不足5位,则前面补0,因此两段变成0。
  第四步,将两段的顺序倒过来,即0。
  第五步,在每一段的最前面添加一个"连续位",除了最后一段为0,其他都为1,即变成0001。
  第六步,将每一段转成Base 64编码。
查表可知,100000为g,000001为B。因此,数值16的VLQ编码为gB。上面的过程,看上去好像很复杂,做起来其实很简单,具体的实现请看官方的文件,里面有详细的注释。
十、参考链接
2017年6月,TC39 委员会正式发布了《ES2017 标准》。
Web 技术突飞猛进,但是有一个领域一直无法突破 ---- 游戏。
Node 主要用在开发 Web 应用。这决定了使用 Node,往往离不开 Web 应用框架。
一、什么是内存泄漏?
程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。博客分类:
Java中有集合,Map等对象存储工具类,这些对象使用简易,但是在JavaScript中,你只能使用Array对象。
这里我创建一个自定义对象,这个对象内包含一个数组来存储数据,数据对象是一个Key,可以实际存储的内容!
这里Key,你要使用String类型,和Java一样,你可以进行一些增加,删除,修改,获得的操作。
使用很简单,我先把工具类给大家看下:
* @version 1.0
* 用于实现页面 Map 对象,Key只能是String,对象随意
var Map = function(){
this._entrys = new Array();
this.put = function(key, value){
if (key == null || key == undefined) {
var index = this._getIndex(key);
if (index == -1) {
var entry = new Object();
entry.key =
entry.value =
this._entrys[this._entrys.length] =
this._entrys[index].value =
this.get = function(key){
var index = this._getIndex(key);
return (index != -1) ? this._entrys[index].value :
this.remove = function(key){
var index = this._getIndex(key);
if (index != -1) {
this._entrys.splice(index, 1);
this.clear = function(){
this._entrys.length = 0;;
this.contains = function(key){
var index = this._getIndex(key);
return (index != -1) ? true :
this.getCount = function(){
return this._entrys.
this.getEntrys =
function(){
return this._
this._getIndex = function(key){
if (key == null || key == undefined) {
return -1;
var _length = this._entrys.
for (var i = 0; i & _ i++) {
var entry = this._entrys[i];
if (entry == null || entry == undefined) {
if (entry.key === key) {//equal
return -1;
如果你不懂Js中对象的创建等一些基础知识,自己可以网上查一下。
// 自定义Map对象
var map = new Map();
map.put("a","a");
alert(map.get("a"));
map.put("a","b");
alert(map.get("a"));
先弹出 a 后面弹出 b ,因为后面的会覆盖前面的!
其他方法大家自己写写看!
请您到ITEYE看我的原创:
或支持我的个人博客,地址:
(function(){& var Map = function(){&&& this._data = {};&&& //...& };& Map.prototype = {&&& put: function(key, val){&&&&& this._data[key] =&&& },&&& get: function(key){&&&&& return this._data[key];&&& }& };})();直接写的,不知道能不能运行。不好意思,漏了点东西。。。
(function(W){
var Map = function(){
this._data = {};
Map.prototype = {
put: function(key, val){
this._data[key] =
get: function(key){
return this._data[key];
})(window);
水平确实一般
谢谢批评,JS功底我确实不行
this._getIndex = function(key){
if (key == null || key == undefined) {
return -1;
var _length = this._entrys.
for (var i = 0; i & _ i++) {
var entry = this._entrys[i];
if (entry == null || entry == undefined) {
if (entry.key === key) {//equal
return -1;
你这又是何必呢。
JS对象{}本来就是K-V的你何必用数组呢?不过 JS对象里的关键字你倒是要考虑一下咯。
多谢指点
cuisuqiang
浏览: 3003285 次
来自: 北京
浏览量:2791338
貌似少了一个java文件哈 ...
cuisuqiang 写道jlcon 写道chenqidou
这个字段用法是如果相互之类超过多少时间没有数据交互,才抛出的正 ...
页面还是jsp,怎么能叫做Freemarker入门示例呢?小强 ...
学习了! 用了这个方法,就不会阻塞了
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客分类:
//定义简单Map
function getMap() {//初始化map_,给map_对象增加方法,使map_像Map
var map_ = new Object();
map_.put = function(key, value) {
map_[key+'_'] =
map_.get = function(key) {
return map_[key+'_'];
map_.remove = function(key) {
delete map_[key+'_'];
map_.keyset = function() {
var ret = "";
for(var p in map_) {
if(typeof p == 'string' && p.substring(p.length-1) == "_") {
ret += ",";
ret += p.substring(0,p.length-1);
if(ret == "") {
return ret.split(",");
return ret.substring(1).split(",");
return map_;
var map = getMap();
map.put("395","12,21,52,89,35");
map.put("396",",5555");
alert(map.get("395"));//输出:12,21,52,89,35
alert(map.keyset()); //输出:395,396
浏览 15592
浏览: 39870 次
来自: 成都
版本冲突问题吧。在Idea中配置库,Maven依赖又加了不同版 ...
map的key是不重复的,你这个put方法有问题吧
C:\Program Files\Apache Softwar ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 js怎么定义map 的文章

 

随机推荐