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提供接口的 ...
随机推荐
- ansible基础配置
1.基础配置 1.1.环境 主机配置 ansible版本:2.7.4 控制端:centos7.4,IP:192.168.1.213,主机名:operation 被控制端: centos6.5,IP:1 ...
- CSU——2161: 漫漫上学路 最短路
Description 众所周知,CSU(California State)University) 的上课地点距离学生公寓很远,对于爱睡懒觉的小Z来说,每天去上课就成了一件非常头疼的事,如果有早课的话 ...
- 笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)
议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法:使用显示下推栈存储快速排 ...
- linux性能优化cpu-01性能指标
学习性能优化的第一步,一定要了解性能指标. 性能指标是什么? 当我们看到性能指标时一定先想到“高并发”.“响应快”,这个两个指标也对应着性能优化的两个核心指标—— “吞吐率”和“低延迟”. 这两个指标 ...
- java使用ant.jar解压缩文件
ant.jar下载地址http://ant.apache.org/bindownload.cgi 压缩文件代码: import org.apache.tools.ant.Project; import ...
- mysql常用命令用法
Mysql帮助文档地址:http://dev.mysql.com/doc/ 1.创建数据库: create database database_name; 2.选择数据库: use database_ ...
- Python基础 - pip导出依赖环境和安装依赖环境的命令
导出: pip freeze > requirements.txt 安装: pip install -r requirements.txt
- Quartz--01
Quartz 调度器(scheduler):定时定频率的去执行任务 任务(job):业务逻辑 触发器(trigger):让任务生效的时间 JobDetail(包含任务实现类,任务信息) trigger ...
- LeetCode(4)Median of Two Sorted Arrays
题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- Codeforces Round #352 (Div. 2),A题与B题题解代码,水过~~
->点击<- A. Summer Camp time limit per test 1 second memory limit per test 256 megabytes input s ...