JavaScript你所不知道的困惑(1)
2024-09-30 04:56:29
困惑一:
先看一个样例:
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没有块级作用域。
最新文章
- html中role的作用
- JAVA NIO——Buffer和FileChannel
- (基础篇)PHP流程控制语句
- 纯CSS 多图片轮播
- 用正则匹配一串字符串中的ip地址
- 记一次-angular-数字格式化
- 写自己的一个pdo数据库操作框架
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介及常用数据库的driverClass和驱动包
- oozie配置安装与原理
- httpd常用配置
- thinkhphp 上传文件或者图片
- js 消抖(debounce)与节流(throttle)
- CSS引入
- jsonp 跨域 jsonp 发音
- springboot的小知识总结
- U3D中的一些方法和属性
- IDEA如何初始化Git本地仓库,并提交到远程仓库
- 个人知识管理系统Version1.0开发记录(06)
- Exchange Server 2007 多名称证书配置
- [转]Shell脚本中获取SELECT结果值的方法