困惑一:

先看一个样例:

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没有块级作用域。

最新文章

  1. html中role的作用
  2. JAVA NIO——Buffer和FileChannel
  3. (基础篇)PHP流程控制语句
  4. 纯CSS 多图片轮播
  5. 用正则匹配一串字符串中的ip地址
  6. 记一次-angular-数字格式化
  7. 写自己的一个pdo数据库操作框架
  8. c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包
  9. oozie配置安装与原理
  10. httpd常用配置
  11. thinkhphp 上传文件或者图片
  12. js 消抖(debounce)与节流(throttle)
  13. CSS引入
  14. jsonp 跨域 jsonp 发音
  15. springboot的小知识总结
  16. U3D中的一些方法和属性
  17. IDEA如何初始化Git本地仓库,并提交到远程仓库
  18. 个人知识管理系统Version1.0开发记录(06)
  19. Exchange Server 2007 多名称证书配置
  20. [转]Shell脚本中获取SELECT结果值的方法

热门文章

  1. Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)
  2. SQL Server中 sysobjects、sysolumns、systypes
  3. [Luogu] P1865 A % B Problem
  4. VSCODE插件开发:用户输入输出
  5. 每日命令:(12)sar
  6. LAMP中添加多虚拟主机
  7. Vue页面骨架屏(二)
  8. java发送短信验证码的功能实现
  9. msp430入门编程03
  10. Linux下汇编语言学习笔记27 ---