JavaScript你所不知道的困惑(1)
困惑一:
先看一个样例:
function test(){
message = "hi";
}
test();
alert(message);
会输出字符串“hi"
在函数内部使用var定义的变量是局部变量,省略var操作符的变量是全局变量。
困惑二:
alert(undefined == null)
结果是”true"
我们知道在js中分为基本类型和引用类型,基本类型包含number、string、boolean、undefined、null.假设一个基本类型没有初始化则会是undefined类型,而null代表空指针。
实际上undefined值是派生自null的。因此返回true.
困惑三:
alert(isNaN(NaN)); //true
alert(isNaN(10)); //false
alert(isNaN("10")); //false 自己主动类型转换
alert(isNaN("blue")); //true
alert(isNaN(true)); //false 自己主动类型转换
NaN指非数值(Not a Number)是一个特殊的数值,在ECMAScript中,不论什么数值除以0返回NaN,并且不论什么涉及NaN的操作都会返回NaN. NaN与不论什么值不等。包含自身。
alert(NaN == NaN); // false
困惑四:
for(var propName in window){
document.write(propName);
}
For - in 语句是一种精准的迭代语句。能够用来枚举对象的属性。相似于java中的for( String s : String[])
困惑五:
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href; //等价于以下 with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
with语句的作用是将代码的作用域设置到一个特定的对象中。主要目的是为了简化多次编写同一个对象的工作。
困惑六:
function howManyArgs(){
alert(arguments.length);
}
howManyArgs("String", 45); //2
howManyArgs(); //0
howManyArgs(12); //1
ECMAScript中的參数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些參数(假设没有參数的话)。
命名的參数仅仅提供便利,但不是必须的。再看以下样例
function doAdd(num1, num2){
arguments[1] = 10;
alert(arguments[0] + num2);
}
由于arguments对象中的值会自己主动反映到相应的命名參数,所以num2会变成10,可是他们的内存空间是独立的(不是引用),另外arguments对象的长度是由传入的參数个数决定的,不是由定义函数时的命名參数个数决定的。
困惑七:
for(var i=0; i<10; i++){
}
alert(i); //输出结果为 10
JavaScript没有块级作用域。
JavaScript你所不知道的困惑(1)的更多相关文章
- JavaScript你所不知道的困惑(2)
困惑一: var obj1 = new Object(); var obj2 = obj1; obj1.name = "阳光小强"; alert(obj2.name); //输出结 ...
- JavaScript你所不知道的困惑(3)
版权声明:本文出自水寒的原创文章.未经博主同意不得转载. https://blog.csdn.net/lxq_xsyu/article/details/25600011 困惑一: window.col ...
- JavaScript中你所不知道的Object(二)--Function篇
上一篇(JavaScript中你所不知道的Object(一))说到,Object对象有大量的内部属性,而其中多数和外部属性的操作有关.最后留了个悬念,就是Boolean.Date.Number.Str ...
- js值----你所不知道的JavaScript系列(6)
1.数组 在 JavaScript 中,数组可以容纳任何类型的值,可以是字符串.数字.对象(object),甚至是其他数组(多维数组就是通过这种方式来实现的) .----<你所不知道的JavaS ...
- js类型----你所不知道的JavaScript系列(5)
ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型等. 1.内置类型 JavaScript 有七种内置类型: • 空值(null) • 未定义( ...
- 闭包----你所不知道的JavaScript系列(4)
一.闭包是什么? · 闭包就是可以使得函数外部的对象能够获取函数内部的信息. · 闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. · 闭包就 ...
- 你所不知道的setInterval
在你所不知道的setTimeout记载了下setTimeout相关,此篇则整理了下setInterval:作为拥有广泛应用场景(定时器,轮播图,动画效果,自动滚动等等),而又充满各种不确定性的这set ...
- 你所不知道的setTimeout
JavaScript提供定时执行代码的功能,叫做定时器(timer),主要由setTimeout()和setInterval()这两个函数来完成.它们向任务队列添加定时任务.初始接触它的人都觉得好简单 ...
- 你所不知道的 URL
0.说明 第一幕 产品:大叔有用户反映账户不能绑定公众号.大叔:啊咧咧?怎么可能,我看看?大叔:恩?这也没问题啊,魏虾米.大叔:还是没问题啊,挖叉类.大叔:T T,话说产品姐姐是不是Java提供接口的 ...
随机推荐
- 2.C# 输入一个整数,求质因数
C# 输入一个整数,求质因数 List<int> results = new List<int>(); int number = Int32.Parse(Console.Rea ...
- 2.10.1 article元素
嵌套 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <titl ...
- Jedis集成到项目中
Jedis整合到项目中,就可以在项目中使用redis了,作为Java程序狗,这个可以会,贴代码了,不截图了,哈哈 一.maven中的pom.xml中添加依赖 <dependency> &l ...
- Autorelease pools 官方文档
翻译自: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAu ...
- org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException 前言中不允许有内容 来自类路径资源的XML文档中的第1行是无效的
今天复习一下Spring和Hibernate的整合,遇到了一个问题,报错信息如下: org.springframework.beans.factory.xml.XmlBeanDefinitionSto ...
- nodejs运行机制
有一天老大忽然问起我这个问题,nodejs运行机制 是怎样的?因自己对nodejs也不是很熟悉,就上网查了一下,得出结果如下: 1.简介 Node.js是一个事件驱动I/O服务端JavaScript环 ...
- 计算几何——认识基本object:点、线、面 。
认识基本object:点.线.面 一.点 点用P(x, y)来表示:如: typedef pair<double, double> _pair; _pair point[MAXN]; 二 ...
- linux 服务脚本
#!/bin/bash # # chkconfig: # description: my_SERVICE_NAME is a my Service # # common function . /etc ...
- Linux环境搭建SVN服务
一.准备工作 首先要保证自己的linux电脑能上外网,我这电脑因为是新的,没有配置网络,所以再这块花费了点时间. 1.检查ip信息 >ifconfig 2.检查DNS服务器 >cat / ...
- hunnu - 11545 小明的烦恼——找路径 (最大流)
http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11545 只是要求不经过相同的边,那么每次找出一条增广路T-- ...