JS类型(2)_JS学习笔记(2016.10.02)
undefined
undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。
注意:
·undefined参与任何数值计算时,其结果一定是NaN。
·只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。[ 注释:null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。]
·当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫 'undefined' 的属性,然后再比较两个操作数的引用指针是否相同。由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时 间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可
以自行定义一个局部的undefined变 量,来加快对undefined的比较速度。例如:
function anyFunc()
{
var undefined; //自定义局部undefined变量
if(x == undefined) //作用域上的引用比较
while(y != undefined) //作用域上的引用比较
};
其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。
这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!
null
null在 Javascript中代表一个特殊的Object类型的值,他用来表示空引用的概念,如果要将一个标识符声明称object类型,但是暂时不给他实例,那么就可以将它先初始化为null,以便以后使用。
注意:
·null == undefined ,但是null !== undefined
·null 参与数值运算时其值会自动转换为 0
NaN
NaN是一种特殊的number。
NaN与任何值都不相等,与自己也不相等。
对象
1、对象中包含着一系列属性,并且这些属性是无序的,每个属性都包含着一个字符串key和对应的值value。
var obj = {};
obj[1] = 1; //数字1会被自动转换成字符串’1’
obj[‘1’] = 2;
obj; // Object {1 : 2}
obj[{}] = true;
obj[{x : 1}] = true;
obj; //Object {1 : 2;[object Object] : true}
2、对对象的新增、删除属性操作,只会在对象本身上进行操作,不会修改到对象的原型上的属性。
var obj = {x : 1}
obj.prototupe.y = 3;
obj.y = 2;
obj; //object {x : 1;y : 2}
obj.prototupe.y; //3
delect obj.y
obj; //object {x : 1}
obj.prototupe.y; //3
obj.y; //3
3、遍历对象的属性时,可以有两种方法:
(1)for循环
var obj = {x1 : 1;x2 : 2}
for(var I = 0;i<2;i++){
console.log(obj[‘x’+i]);
}
(2)for…in遍历
var obj = {x1 : 1;x2 : 2}
var p;
for(p in obj){
console.log(obj[p]);
}
注意:使用for…in遍历对象时,获取到的属性是无序的,并且会把对象原型链上的属性也遍历出来。
例如:
Object.prototype.bar = 10; // 修改Object.prototype
var obj={"name":"wjy","age":26,"sex":"female"}; //定义一个object对象
var keys=[]; //定义一个数组用来接受key,此时的key即为对象的属性名
var values=[]; //定义一个数组用来接受value
for(var key in obj){
keys.push(key);
values.push(obj[key]); //取得value
}
alert("keys is :"+keys+" and values is :"+values); //keys is : name,age,sex,bar and values is : wjy,26,female,10
可以使用 hasOwnProperty方法,这将会避免原型对象扩展带来的干扰,只会访问对象独有的属性。
Object.prototype.bar = 10;
var obj={"name":"wjy","age":26,"sex":"female"};
var keys=[];
var values=[];
for(var key in obj){
//只遍历对象自身的属性,而不包含继承于原型链上的属性。
if (obj.hasOwnProperty(key) === true){
keys.push(key);
values.push(obj[key]);
}
}
alert("keys is :"+keys+" and values is :"+values); //keys is : name,age,sex and values is: wjy,26,female
注意:object对象没有length属性,所以不能直接通过for(var i=0;i<object.length;i++)的方式来访问,可以通过遍历得到key值的数组的长度来获取object自身属性的个数。
keys.length; //"3"
对象都是唯一独立的,任何2个对象都是不相等的。在 js 中,对象时引用类型,而引用类型比较相等的时候,比较的是内存地址,所以即使两个看起来一摸一样的对象,如果内存地址不相等的话,那么也是不等的。
{'a': '1'} == {'a': '1'}
//false
JS类型(2)_JS学习笔记(2016.10.02)的更多相关文章
- php学习笔记2016.1
基本类型 PHP是一种弱类型语言. PHP类型检查函数 is_bool() is_integer() is_double() is_string() is_objec ...
- SpringBoot学习笔记(10):使用MongoDB来访问数据
SpringBoot学习笔记(10):使用MongoDB来访问数据 快速开始 本指南将引导您完成使用Spring Data MongoDB构建应用程序的过程,该应用程序将数据存储在MongoDB(基于 ...
- Flutter学习笔记(10)--容器组件、图片组件
如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...
- javaSE学习笔记(10)---List、Set
javaSE学习笔记(10)---List.Set 1.数据存储的数据结构 常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 1.栈 栈:stack,又称堆栈,它是运算受限的线性表 ...
- 【python学习笔记】10.充电时刻
[python学习笔记]10.充电时刻 任何python都可以作为模块倒入 *.pyc:平台无关的经过编译的的python文件, 模块在第一次导入到程序中时被执行,包括定义类,函数,变量,执行语句 可 ...
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)
Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...
- JS类型(1)_JS学习笔记(2016.10.02)
js类型 js中的数据类型有undefined,boolean,number,string,null,object等6种,前5种为原始类型(基本类型),基本类型的访问是按值访问的,就是说你可以操作保存 ...
- Ionic2学习笔记(10):扫描二维码
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5575843.html 时间:6/11/2016 说明: 在本文发表的时候(2016-06-1 ...
- 《JS高程》事件学习笔记
事件:文档或浏览器窗口中发生的一些特定的交互瞬间,也即用户或浏览器自身执行的某种动作. -------------------------------------------------------- ...
随机推荐
- 《深入Java虚拟机学习笔记》- 第5章 Java虚拟机
一.JVM的生命周期 当启动一个Java程序时,一个Java虚拟机实例就诞生了:当该程序关闭退出时,这个Java虚拟机也就随之消亡: JVM实例通过调用某个初始类的main方法来运行一个Java程序: ...
- 利用文件实现Free Pascal中的简单排序功能
此程序主要是验证文件功能的读写功能,总结到的东西有:①文件无论是读还是写,都要先建立链接关系才可以进行;②读与写不能同时进行,必须分开操作,这也可以理解,在实际鼠标操作时也是如此的!③读写后必须用cl ...
- MSP430单片机输入与输出
MSP430单片机的输入输出线绝大多数是服用的,除了个别的端口外,基本上是8为为一组,不同的型号的MSP430的端口有所不同,就msp430F5438而言,一共有11个I/O端口,其中除了第十一P11 ...
- C++ 输入输出流 总结
1.ostream & operator<<(int); 重载了<<符号,用于对int类型的输出.为什么要返回ostream的引用呢? 例如: cout<< ...
- new和delete为什么要匹配
operator new和operator delete函数有两个重载版本: void* operator new (size_t); // allocate an object void* oper ...
- Hubot Slack CoffeeScript
公司买了一台Mac Pro,为了物尽其用,研究了半天把hubot-slack装好了,然后又花了点时间学习CoffeeScript(照着例子写也足够了).用slack来发版本还是很爽的.
- 自己安装的几个Eclipse插件
http://eclipsenotepad.sourceforge.net This plugin has the simple objective to let developers write s ...
- HDU-4669 Mutiples on a circle 环形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4669 题意:给一串数字连乘一个环,求连续的子串中组成的新的数字能被K整除的个数. 首先容易想到用DP来 ...
- 基于Qt的P2P局域网聊天及文件传送软件设计
基于Qt的P2P局域网聊天及文件传送软件设计 zouxy09@qq.com http://blog.csdn.net/zouxy09 这是我的<通信网络>的课程设计作业,之 ...
- HDU1710Binary Tree Traversals
HDU1710Binary Tree Traversals 题目大意:给一个树的前序遍历和中序遍历,要求输出后序遍历. (半年前做这道题做了两天没看懂,今天学了二叉树,回来AC了^ ^) 首先介绍一下 ...