键值对、map对象与作用域

键值对:

概念:

主要是面向对象语言里的字典,或者叫哈希表,它通过键 (key)可以直接访问到值 (value),所以它查找的时间复杂度是O (1),即一次查找即可找到目标;在.net里有Dictionary,而在java里有HashMap等结构来实现,而在NoSQL里也有redis为代表的值存储数据库;而在js里好像没有一种哈希的数据结构,不过我们可以借助对象的概念来实现,键相当于对象里的属性,而值相当于属性的值

代码演示:

var variable = 67;
var map =
{
key 1 : 'string_val',
key 2 : variable,
'key 3': function(){alert('blah')},
'if the key is not a valid variable name, or is reserved, quote it': true
}

alert(map.key 1);
alert(map['key 2']);
map.key 3();
if( map['if the key is not a valid variable name, or is reserved, quote it'])
alert('OK?');

map对象的使用:

1.map语法:

map() 函数语法:map(function, iterable, …)
简单来说,map()它接收一个函数 f 和一个 可迭代对象(这里理解成 list),并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

遍历方法

Map 结构原生提供三个遍历器生成函数和一个遍历方法。

  • keys():返回键名的遍历器。
  • values():返回键值的遍历器。
  • entries():返回所有成员的遍历器。
  • forEach():遍历 Map 的所有成员。

代码:

  <script>
        
// map对象:
//Map对象用来保存键值对
//在Map对象中任何值(对象或者原始值)都可以作为一个键(任何数据类)
//基本Map方法:
//new Map():创建新的Map对象
//set():为Map对象中的键设置值
//get():获取Map对象中键的值
//keys():返回Map对象中键的数组
//values():返回Map对象中值的数组
//entries():返回Map对象中键/值对的数组
//Map()属性
//Map.size:返回Map中元素的数量

//示例:
//创建对象
const blue = {name:'蓝色'};
const green = {name:'绿色'}
const yellow= {name:'黄色'};

//创建新的Map对象(new Map())
const color =  new Map();

//向Map对象添加成员(set())
color.set(blue,800);
color.set(green,300);
color.set(yellow,700);

//获取Map对象中键中的值(get())
console.log(color.get(green)); // 300

//获取Map对象中键的数组(keys())
console.log(color.keys()); // MapIterator {{…}, {…}, {…}}

//获取Map对象中值的数组(values())
console.log(color.values()); // {800, 300, 700}

//获取Map对象中键/值对的数组(entries())
console.log(color.entries()) // {{…} => 800, {…} => 300, {…} => 700}

//返回Map中元素的数量(Map.size)
console.log(color.size) //3

// 其他map()方法
// clear()删除map中的所以元素
// delete()删除由键指定的元素
// has()如果键存在,则返回true
    </script>

作用域:

<script>
// 作用域:
// 作用域是行时代码中某些特定部分中变量,函数和对象的可访问性
//换句话说,作用域决定了代码中变量和其他资源的可见性
function Fun(){
    let a ='内层变量'
    console.log(a);
    }
    Fun();//先执行函数
    //console.log(a);
    function fun () {
    console.log(a);
    }
    fun()
    
//console.log(a);//a is not defined
//变量a在全局作用域没有声明,所以在全局作用域下取值会报错
//作用域就是一个独立的地盘,让变量不会外泄、暴露出去
//作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突
//ES6之前JavaScript没有块级作用域,只有全局作用域和函数作用域
//ES6的到来,为我们提供了"块级作用域",可通过新增命令let和const来体现

函数作用域:

 <script>

        //【局部变量/函数作用域】

//声明在函数内部的变量,和全局作用域相反,局部作用域一般只在固定的代码片段内可)

//最常见的例如函数内部,所以在一些地方也会看到有人把这种作用域称为函数作用域,

function outFun() {

    var a ='函数内部的变量';

function innerFun(){

    console.log(a); //函数内部的变量

    }

    innerFun();

}

// console.log(a); // a is not defined

innerFun;//innerFun is not defined

outFun()

    </script>

全局作用域:

<script>
        // 【全局作用域】 
        // 在代码中任意地方都能访问到的对象拥有全局作用域。
        //(即在全局作用域中定义的变量可以在任何地方使用。)
        // 全局作用域在页面打开时创建,在页面关闭时销毁。

        // 【情况一:所有未定义直接赋值的变量自动声明为拥有全局作用域】 
        function Fun1(){
            a ='未定义直接赋值的变量'; 
            var b ='内层变量';
        }
        Fun1();
        console.log(a);//未定义直接赋值的变量
        //console.log(b); //b is not defined

        // 【情况二:最外层函数和最外层函数外面定义的变量拥有全局作用域】 
        var A = '最外层变量';//最外层变量

        function outFun(){ //最外层函数
            var B ='最外层函数的内层变量'

            function innnerFun(){  //内层函数
                var c ='内层函数的内部变量'
            }
        }
        console.log(A);//最外层变量
        //console.log(B); //B is not defined 
        outFun()
        //innerfun(() //innerfun is not defined
        //console.log(c); //c is not defined

        // 【情况三:所有window对象的属性拥有全局变量】
        // 在全局作用域中有一个全局对象window,他代表的浏览器的窗口,由浏览器创建。
        // 一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location
    </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值