JavaScript高级程序设计第三章(2)

在不知道这个值是null还是undefined的时候,可以使用String()函数,这个函数不管是什么函数都可以转换,比如null转为"null",undefined转为"undefined",如果是有toString()函数的,那么使用String函数的使用它会默认使用toString函数

Object类型的创建跟java一样

var ovj = new Object();

Object的每个实例都有下面属性和方法:

Constructor()构造函数
hasOwnProperty(propertyName(必须是字符串类型的)) 查看是否有名字为propertyName的属性

propertyIsEnumerable(propertyName)判断数星星是否可以来for in 枚举

ifPrototyOf(Object) 判断这个Object对象是否为另一个对象的原型

补充知识:BOM和DOM中的对象是属于宿主对象

操作符号

有C的那种++i,也有i++;

看到一个不认识的知识点,想mask下来,日后回顾填坑
var o = {

valueOf: function(){
   
    return -1;
}

}

一元加操作符不会对该变量造成任何数值上的增加
例如:
var a = 10;
a = +a; //结果还是10

一元减操作符对使变量为负
例如:
var s = “1.1”
s = -s ; //结果是-1.1

var b = “a”
b = -b; //结果是NaN

var c = “-1”
c = -c; //结果是1

ECMAScript中所有的数值都以IEE754 64位格式来存储的,但是操作的时候并不是用64位,而是将64位转为32位来操作,并且最前面的一个是表示符号正负(0为正,1位负),后面31位表示数值

NOT(按位非):~
var num1 = 25;// 二进制是00000000000000000000000000011001
var num2 = ~num; //二进制是11111111111111111111111111100110

AND(与):&

OR(或)😐

XOR(异或):^
左移:<<
右移:>>
他们的原理其实在数电也有学过,这里不多作解释了

逻辑非:!
如果有东西的话(数字不为0和NaN,字符串不为空),返回false
例如:
alert(!false); //true
alert(!“Blue”); //false
alert(!0); //true
alert(!NaN); //true
alert(!""); //true
alert(!1234); false

两个!!那么效果跟Boolean()效果一样
alert(!!0); //false
alert(!!1234); //true

逻辑与:&&
var found = true;
var result = found && someUndefinedVariable);
alert(result);
会报错,因为someUndefinedVariable是没有定义是

但是修改成false不会报错,因为任何(不管是false还是true)跟false作逻辑与(&&)都会变为false;
var found = false;
var result = found && someUndefinedVariable);
alert(result); //会执行false

逻辑或(||)
var found = false;
var result = found && someUndefinedVariable);
alert(result);
会报错

var found = true;
var result = found && someUndefinedVariable);
alert(result);
不会报错,原因跟上面的逻辑与(&&)是一样的

我们经常采用逻辑或(||)来进行赋值
var myObject = pre || back
如果pre值不为null,那么就使用pre的值
如果pre的值为null,那么就使用back的值

讲一下+号。跟java一样
如果+左右有字符串,那么就算是个数字也会变成字符串的连接
例如:
var a = 5;
var b = a + “5”; //结果是"55",而不是10

比较:> < == >= <= != ===(全相等)
跟C没有区别
主要有一个字符串跟数值比较的时候,字符串会转为数值
例如:
var result = “23” < 3 ; //结果是false,因为字符串"23"转为数值23
var result = “a” < 3 ; //结果是false,因为字符串"a"转为数值NaN
var result = NaN < 3 ; //结果是false,因为数值NaN无论怎么比(大也好(>),小 也罢(<)都是false

条件操作符,跟C一样,不多说了
例子:
var max = (num1 > num2) ?num1 : num2

if-else
do-whilt
whilt
for
这4句跟C的没有任何区别
要注意的是if后面就算只有一句,也要加{},这个是良好的习惯

for-in循环
for(var proName in window){

document.write(proName);

}
需要特别注意的是for-in循环是不安顺序的。不同是浏览器可能顺序不同,但是都会遍历一次
而且迭代的对象保证里面没有null或者undefined,在ECMAScript3版本中,如果出现的话会报错,而ECMAScript5版本中,如果出现则不再循环for-in,不会报错

label语句可以在代码中添加标签,以便将来使用

例如:
start:for (var i = 0; i< count ;i++){

alert(i);
if(i == 8){break;}

}
这个start标签可以在将来由break语句或者continue语句引用

with
这个语句的主要目的是为了简化多次编写同一对象的工作:
例如:
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语句关联了location对象
这个不建议使用

switch语句跟java的一样
switch(i){

case 1:
…;
break;
case 2:
…;
break;
default:
break;
}

但是它也有自己的特色
例如
var num = 25;
switch(true){

case num < 0:
…;

case num > 0:
…;

default:

break;
}
它会找到case中的跟switch一样的,就是找到了第二个case ,因为它返回的是true跟switch一样

补充:函数
1.
函数,直接上例子:
function sayHi(name , message){

alert("Hello"+name+","+message);

}
函数头跟python的格式挺像的

函数体也有return语句,跟C一样

函数的参数有点意思的:
ECMAScript函数不在意传进来多少个参数,也不在乎这些参数是什么类型
就算定义的是2个参数,传入的也可以是1个参数
实际上在函数体里面,可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
而这个auguments对象只是跟数组类型(它并不是Array的实例)

1中的函数可以这样写
function sayHi(){

alert("Hello"+auguments[0]+","+arguments[1]);

}
虽然这个函数不包含命名的参数,但是功能依旧,这说明了命名的参数只是提供了便利,但是不是必需的
通过arguments.length来查看到底传进了多少个参数
这个特性比不上函数重载,但是也弥补了缺憾

有个比较好玩的

function sayHi(name,message){

arguments[1] = "lalala";

}
第二个参数的值会被修改
但是修改message,它不会映射到arguments[1],所以这种映射是单向的
如果传入参数是一个的话,那么message这个参数是undefined
在严格模式下,修改arguments[1]并不会引起message一起修改,而且重写arguments会引起错误

如果真有两个函数名一样的函数,那么后者函数会覆盖前者函数,没有函数重载这个功能的,前文也讲到过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值