JavaScript 中一些小坑
来源:互联网 发布:华为云计算hcie 编辑:程序博客网 时间:2024/06/06 02:47
“==” 和 “===” 的区别
“==” :相等运算符,用来检测两个操作数是否相等,这里的“相等”定义非常宽,可以允许两个操作数进行类型转换。
“===”:恒等运算符,用来检测两个操作数是否严格相等,不允许两个操作数进行类型转换。
let a = 0;let b = false;console.log(a == b); //=>true, 返回trueconsole.log(a === b); //=>false, 返回false
另:对象跟数组的相等判断并不在于表面的名/值对,而在于它们指向的内存和地址
let x = { name: xiao, password: 123};let y = { name: xiao, password: 123};let z = x;console.log(x == y); //=>falseconsole.log(x == z); //=>true
变量 x 跟变量 y 虽然看起来完全一样,但是它们指向的内存和地址并不一样,而把变量 z = x,则使得变量 z 指向跟变量 x 一样的内存和地址。浅拷贝与深拷贝
上面例子中的 z = x 使得变量 z 指向跟变量 x 一样的内存和地址,于是,当变量 z 改变的时候,变量 x 也随之改变,这就是也叫浅拷贝。
x = { name: xiao, password: 123 };z = x;z.password = 456;console.log( z ); //=> { name: xiao, password: 456}; console.log( x ); //=> { name: xiao, password: 456}
若要使得变量 z 获得跟变量 x 一样的名/值对,且变量 x 不随变量 z 的改动而变化,则需要使用深拷贝。
方法一:
x = { name: xiao, password: 123 };z.name = x.name;z.password = x.password;z.password = 456;console.log( z ); //=> { name: xiao, password: 456}; console.log( x ); //=> { name: xiao, password: 123};
这样就是做到获取到和变量 x 一样的名/值对之后,可变却不干扰变量 x 。数组同理。方法二:
//对象的深拷贝x = { name: xiao, password: 123 };z = {};for(var key in x){ z[key] = x[key]}console.log( z ); //=> { name: xiao, password: 123 };//数组的深拷贝arr = ['one','two','three'];myArr = arr.slice(0);console.log( myArr ); //=> ['one','two','three'];
全局变量 和 局部变量
1、局部变量在函数体内优先级高于同名全局变量,
局部变量在声明它们的函数体内任意一个地方均有定义
var scope = "global";function one(){ console.log(scope); //=> "undefined" var scope = "lobal"; //局部变量在这里赋初始值,但变量在函数体内任意地方均有定义 console.log(scope); //=> "lobal"}
阅读全文
0 0
- JavaScript 中一些小坑
- javascript一些小技巧
- 一些小方法JavaScript
- JavaScript一些小知识点
- javascript一些小知识
- javascript 一些小知识点
- 一些JavaScript小技巧
- 工作中常用的一些javascript的小技巧
- 工作中常用的一些javascript小技巧(二)
- 工作中常用的一些javascript小技巧(三)
- 网页中的一些Javascript的小技巧(不断更新中)
- javascript使用中的一些小功能总结(持续更新中)
- Javascript中实用的和新鲜的一些小知识
- javascript的一些小技巧
- javascript的一些小技巧
- javascript的一些小技巧
- javascript的一些小知识
- javascript的一些小技巧
- 096: 复习习题 求导题型 Case4:变积分限函数导数;Case5:高阶导数;Case6:分段函数求导
- maven web工程提示Cannot detect Web Project version. Please specify version of Web Project through Maven
- spring4整合quartz2.x集群配置,并实现任务计数功能
- 通过JAVA编写一个简单的雇员管理系统小项目
- Linux中fork()函数案例分析
- JavaScript 中一些小坑
- numpy 数学和统计方法
- 20171021《css3专业网页开发指南》
- Abstract class 与 Interface 区别
- 2个鸡蛋100层楼--动态规划
- 怎么在Linux虚拟机中快速配置jdk
- 进程间通信——管道
- 移动架构27_设计模式六大原则五: 迪米特法则
- C/C++:多线程下使用dlopen、dlsym、dlclose装载动态库