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提供接口的 ...
随机推荐
- viewstate 与 session 区别
Session存在于服务器端可以跨页面.耗费服务器资源.ViewState载体是页面文件,消耗带宽. EG: viewstate是存储在客户端的隐藏信息,当服务器接受请求回传时可以将viewstate ...
- windows/linux 更新python pip
linux环境下 pip install -U pip windows环境下 python -m pip install -U pip python -m pip install --upgrade ...
- cssrefresh.js-CSS文件自动刷新
一.如何使用cssrefresh.js 使用很简单,类似下面的代码: <head> <link rel="stylesheet" type="text/ ...
- 笔试算法题(08):输出倒数第K个节点
出题:输入一个单向链表,要求输出链表中倒数第K个节点 分析:利用等差指针,指针A先行K步,然后指针B从链表头与A同步前进,当A到达链表尾时B指向的节点就是倒数第K个节点: 解题: struct Nod ...
- org.dom4j.DocumentException
在使用soapui测试webservice接口的时候如果需要传入xml格式的参数 这么写是不对的,会报错org.dom4j.DocumentException: Error on line 1 of ...
- 五段实用的js高级技巧
技巧一之setTimeout. 应用案例:比如你想一个函数循环执行10次,怎么办?以前通常是先setInterval,然后clearInterval,技巧一就是克服这个问题 复制代码 代码如下: (f ...
- 关于Google浏览器Unable to preventDefault inside passive event listener due to target being treated as passive.的解决方案
最近写react项目的时候,引用了antd-mobile,在使用滚动组件的时候,发现谷歌浏览器会报以下警告 最初我以为是antd-mobile的问题导致的,然后我就无查看了之前的vue的项目,发现了类 ...
- 【】node基础概念问题(转载)
1.nodejs编写HelloWord,了解什么是nodejs,nodejs有什么特点 2.nodejs的模块怎么用,如何载入别的模块(require),如何给另一模块调用(module, mod ...
- python之GUI图形用户界面 2014-4-7
#图形用户界面1.下载和安装wxPython2.创建并显示一个框架import wx #导入wxPythonapp=wx.App()win=wx.Frame(None)win.Show() #调用窗口 ...
- Python条件判断(if)
Python条件判断(if) 一.基本介绍 1.Python 编程中 if 语句用于控制程序的执行,基本形式为: if 判断条件: 执行语句…… 需要注意的是,Python没有像其他大多数语言一样使用 ...