类型转换
字符串的类型转换
parseInt(str)
将str强制转换成整型
toString()
通过toString()方法转换为字符串
parseFloat(str)
将str强制转换为浮点型
除了以上调用方法转换,JavaScript中还可以通过构造函数进行强制类型转换.
Number(str)
强制转换为Number
object(str)
强制转换为object
Boolean(str)
强制转换为boolean
Function(str)
强制转换为function
上述都是对字符串类型的强制转换
数值类型的强制转换
String(num)
Boolean(num)
Object(num)
数值类型的强制转换
String(bool)
Number(bool)
Object(bool)
布尔类型的强制转换
String(obj)
Number(obj)
Boolean(obj)
对象类型的强制转换
浮点数精度问题
在进行浮点计算前,合理的做法是先确定好问题的精度范围.
当然JavaScript提供了几个取整的函数.来限定解的精度.分别是
Math.floor() 取比当前数值小的最小整数
Math.round() 四省五入
Math.cei()l取比当前数值大的最小整数
Number.toFixed(num) 保留num为小数
函数
function f2(){}; 命名方式
var f1=function(){alert}; 匿名方式
命名方式和匿名方式的函数有一点区别.有时候,我们将命名方式定义函数的方法称为声明式函数定义.把匿名函数定义函数的方法称为引用式函数定义或者函数表达式.
如果出现同名的声明式函数.声明式函数定义的代码仙玉函数执行代码被解析器解析.而引用式函数定义或者函数表达式则是在函数运行中动态解析的.
一个函数可以有多个retrun语句.但是一次调用至多只有一个retrun语句被执行.一旦return语句被执行.return后面的表达式计算并作为函数的返回值返回.return语句后面的表达式如果没有.或者函数执行到函数体的末尾,函数的返回值为undefined.
一个函数可以有零个或多个形参,函数对象定义时的形参数量可以通过length属性获得.例如 function max(x,y){}; 则max.length=2
在特殊情况下,函数的实参和形参数量可以不相同.如果函数实参小于形参量.那么多出来的形参的值就是undefined.如果函数实参数量多于形参数量,那么多出来的一部分实参就不能通过形参标识符的形式来访问.(可以通过特殊的Arguments对象来访问)
Arguments对象
除了局部变量和形式参数之外.调用对象还定义了一个特殊属性,名为arguments.实际上引用了一个特殊对象Arguments对象.因为arguments属性时调用对象的一个属性.因此它的状态和局部变量以及形参都是相同的.
Arguments对象是一个集合.可以按照数字下标获取传递给函数的参数值.例如arguments.length可以获得传递给函数的实参数量.例如.利用Arguments对象检测形参
function f(x,y,z)
{
//判断形参和实参适量是否相等
if(f.length!=arguments.length)
{
}
}
改变arguments中的参数使用是相应命名参数的别名(引用类型).改变一个另外一个也会受到影响
除了通过下标访问参数之外.arguments对象还提供了一个有用的属性.叫做callee.被用来引用当前正在执行的函数.提供一种匿名的递归调用能力
例如:JavaScript:(function(x)){retrun x>1?x*arguments.callee(x-1):1)(10)};
函数的调用者指的是调用这个函数的域
而函数的所有者指的是调用这个函数的对象.
函数的所有者.在一般来说.在函数被调用的过程中.一个特殊的调用对象属性.this总是引用函数的所有者.在函数的调用过程中,函数的所有者的属性可以用this,属性来访问.
动态调用 外来的所有者
Function() 原型定义了两个方法.他们是call() 和apply().使用者两个方法可以像调用其他对象一样调用函数.call()和.apply().两个方法的第一个参数都是要调用函数的对象.用call()和apply()调用函数时,函数内的this属性总是引用这个参数.call()的剩余参数是传递给要调用的函数值.他们的数量可以是任意的. apply()方法和call()方法类似.只不过只能接受两个参数.除了调用者之外.第二个参数是一个带下标的集合.比如数组.但也可以不是数据.apply()方法把这个集合中的元素作为参数传递给调用的函数.
JavaScript中用方法(Method)和属性(property)来描述对象
在JavaScript中,object是所有对象的父类.
classB原型继承与classA
classB.prototype=new classA();
hasOwnType()
检查这个对象是否有指定对象的原型.
propertyIsEmuerable()
检查对象是否拥有指定属性且这个属性可被for/in循环枚举.
只有当对象拥有某个属性并且该属性可以被枚举时.该方法的返回值才是true
var row=new Data();
now.toString();
now.toLocaleString();
valueOf()
返回对象的原始值(如果存在).对于类型为object对象,则只返回对象本身.object子类涵盖了该方法.返回的是基于对象相关的原值值.valueOf()可以返回对象拆箱后的基本值类型.
为对象添加删除属性
为对象添加属性通常由集中方式.第一种简单而直接的方式是给对象的属性赋值. 关键字.对于我们并不陌生.
var point=new object()
point对象通过new object创建,除了内置属性外.没有任何自己的属性.
point.x=10; //为point添加x属性
point.y=20; //位point添加y属性
这种比较直接,也比较容易理解.但是你需要创建一类对象时.会显得繁琐.
当然,这时候可以使用前面介绍过的对象常量来完成这件事情.
var point=[{x:2,y:2}];
另一种方法是通过构造函数来添加属性.
function point (x,y)
{
this.x=x;
this.y=y;
}
var points=[new point(1,2),…new pont(3,4)];
删除属性
delete point.x;
从point对象中删除x属性,属性被删除后.该属性在内存中就不存在.
‘x’ in point 为false
new 运算符需要注意的点
function test()
{
}
var a=new test(); //表示存储该值的方法.该方法可以点出里面的方法
var b=test(); //仅仅存储着返回值.纯粹数值
Function可以看做是创建类的类.称之为元类.或者类模板
缺省构造和拷贝构造
缺省构造并不是指缺省构造函数本身.指的是构造函数为空的时候.JavaScript语法允许缺省函数后面的括号
例如:
var o=new object;
对象的拷贝是一种技巧.因为对象在JavaScript中是引用类型.改变一个对象.另一个拷贝也会改变.