当前位置:首页 > Web开发 > 正文

JS变量+作用域

2024-03-31 Web开发

根基类型-栈内存

生存根基类型的变量生存的是值自己

引用类型-堆内存

生存引用类型的变量生存的并不是东西自己,而是一个指向该东西的引用地点

引用类型判断东西是否相等

function equalObjs(a, b) { for (var p in a) { if (a[p] !== b[p]) return false; } return true; } console.log(equalObjs(xm, xh));

引用类型判断数组是否相等

function equalArrays(a, b) { if (a.length !== b.length) return false; for (var i = 0; i < a.length; i++) { if (a[i] !== b[i]) return false; } return true; }

引用类型东西复制(浅拷贝:只拷贝一层)

function copyObj(obj) { var newObj = {}; for (var p in obj) { newObj[p] = obj[p]; } return newObj; }

console.log(undefined==null); /*true*/ console.log(undefined===null); /*false*/

技术图片

从一个变量向另一个变量复制引用类型的值,复制的其实是指针,因此两个变量最终都指向同一个东西,当给变量赋新值时,此变量就不再指向本来的东西了;

数组是引用类型的 , 如题中b=a相当于a与b指向同一个地点 , 但是a=[4,44]之后转变了a的地点 , 所以b不会受到影响 为[4] . 后面又把a=b指向了同一个地点 ,此时为b添加元素 , 因为a、b的地点都没有转变 ,a也会随之转变 ,所以a为[4,44] . 

参数通报的素质是值的复制,由于person是引用类型,这里就相当于把person的地点复制给了函数setName的参数obj

function setName(obj) { obj.name = ‘xm‘; obj = {}; obj.name = ‘xh‘; } var person = {}; setName(person); console.log(person.name); /*xm*/ obj = person

检测变量类型typeof

console.log(typeof 4);//number console.log(typeof(4));//number console.log(typeof ‘str‘);//string console.log(typeof true);//boolean console.log(typeof undefined);//undefined console.log(typeof null);//object console.log(typeof []);//object console.log(typeof {});//object console.log(typeof function () {});//function console.log(typeof /a/);//object

instanceof检测引用类型

不能检测根基数据类型,只要是根基数据类型和instanceof连用,,返回的都是false

console.log([] instanceof Array);//true console.log([] instanceof Object);//true console.log({} instanceof Object);//true console.log({} instanceof Array);//false console.log(1 instanceof Number);//false console.log(null instanceof Object);//false

有两个变量,分袂是a = {name: ‘xm‘}, b = [4],我们不用第三个变量来变更a和b的值

var a = {name: ‘xm‘}, b = [4]; a=[a,b]; b=a[0]; a=a[1];

感化域与解析机制

全局变量容易被污染,少用

with(obj)可以耽误感化域链,但不保举使用

var person = {}; person.name = ‘xm‘; person.sex = ‘male‘; var score = 4; with(person) { name = ‘xh‘; sex = ‘female‘; score = 44; } console.log(person.name); console.log(person.sex); console.log(score);

有3个按钮给每个按钮添加点击事件,但愿每次点击时输出当前点击的是第几个按钮,但是目前岂论点击哪个按钮,最终输出的都是4

原因:由于先绑定,后触发,给每个按钮绑定事件,但是在触发的时候i已经是循环完之后,i的值了

(1)单击要辅导致的循环问题。提示:单击要领在循环外面界说

(2)在循环中挪用,并将被点的按钮的型号传进去

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32393.html