javascript 基础1

变量的作用域

在js中闭包和函数都是独立的域,域和域之间可以嵌套,嵌套的域被成为子域。

在域中用var声明的变量只在当前域和当前的子域起作用

缺少var的声明以及在域之外声明的变量为全局变量。

当前域的变量会影藏上一级别域声明的变量

*在javascript中,没有块级别的作用域,也就是说在一个函数中声明的变量,在函数(闭包)中的任何地方都可以访问到,比如说,下面这段代码在javascript中是正确的:

For(var i=0;i<10;i++){
	List[i]=I;
}
Document.write("最后一个值是"+List[i-1]);//外面也可以访问到I这个变量。


你可以理解为,除了闭包和函数之外的程序段落都不是域。

表达式相关的问题
用+来把数值转换成字符串

Var a = 1.78;
Var b = 3.44;
Alert(a+""+b);


这个返回的实际上是1.783.44不是一个计算的结果

减号可以用来将一个字符串快速转化为一个数值,这个在输入计算时候有用,而且比parseFloat效率更高,语法也更简练
比如:

Var a = "5.66";
Alert (a+1);//这个返回5.661
Alert(a-0+1);//这个返回4.66
//但是parseFloat和直接用减号也是有区别的看下面的
parseFloat("123456abd");//返回123456
"123456abd" -0;//返回NaN


乘法和除法的类似,与C#不同算法的异常不会导致系统的错误,而是返回一个NaN

Math.Float()用来处理数的精度问题

在比较运算符中,只要有一边的值为NaN,那么表达是就返回false,不解释

关于引用类型的相等性,只有引用同一个对象==才返回true。一个引用类型的深度相等比较

//判断一个对象是否和另一个对象相等
Object.prototype.equel = function (o) {
    if (o == this) { return true; }
    if (this.constructor && o instanceof this.constructor) {
        for (var each in this) {
            if (each in o) {
                if (typeof (o[each]) == "function" && !o[each].equel(this[each])) {
                    return false;
                } else if (o[each] != this[each]) {
                    return false;
                }
                return true
            } else {
                return false;
            }
        }
    }
    return false;
}

这里有2个知识点,一个是任何一个对象,可以通过索引的方式来访问其值o[each]
2.要比较2个对象是不是相同类型,用这个方法:o instanceof this.constructor


===这个比交符号,不会对2边的符号进行类型转换,完全相等,包括类型,双等号,会有类型转换的相等,同时注意,如果有一边是NaN,或者undefined其返回的类型将是false

注意短路的逻辑判断一个很好的代码风格:

If(a==b){ dosomething();}
a!=b||dosomething();


这2个是等价的

主要来讲讲对象运算符号:

In:

Var point ={x:1,y:2};
Var bel = "x" in point


这个表达式返回true,in将一个对象当作一个集合来运作,这是一个方便高效的设计方法。
同时继承的属性也能用in来访问到
"toString" in point 返回true的结果

instanceof:
"" instanceof Object
{} instanceof Object
[] instanceof Array
这些都返回true,注意右边要是类型,左边是对象。

new:
这个不解释

delete:
这个用来删除一个元素,属性,或者数组,不是所有的属性和变量都能被删除,内部核心属性,客户端属性,var声明的属性,都是不能被删除的
删除成功返回true否则返回false,删除一个不存在的属性也返回true

var aSet = new Object();
if ("Key1" in aSet) {
    delete aSet["key1"];
}
aSet["key1"] = true;
if (delete aSet["key2"]) {
    aSet["key2"] = true;
}


注意对象属性的2种写法都是可以的

var a = new Object();
a.x = 1;
alert(a['x']);
var b = [1, 2, 3 ];
alert(b[1]);


类型运算符
typeof:
数值返回 number
布尔返回Boolean
字符返回string
对象数组和null返回:Object
函数类和闭包返回:function
未定义未赋值返回:indefined
这个用来做运行时类型检查:
This.__arr = typeof(array)=="string"?array.split(","):array;

Void(0) 用来生成 undefined值,没什么用处

函数调用运算符号()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值