JavaScript数据类型中易被忽略的点

字符串中可以包含由反斜杠\和字符构成的特殊字符,如\n换行,\b 退格,\f 换页,\r回车,\tTab;

 

var multiLine = " first \n second \n third line " alert(multiLine) // alerts 3 lines

""当做转义符号也可以避免一些问题,如

 

var str = 'I\'m the Valrus'

当计算字符串长度时,特殊字符也会参与计算,如:

 

var str = "My\n" // 3 .`\n`也算其中之一 alert(str.length) // 3

Number, Math

JavaScript中的数值采用双精度(IEEE 754),每个数占8byte;

JavaScript可以识别十六进制(0xFF),八进制(010)以及科学计数方法的数字(3e5);

Infinity和-Infinity是两个特殊的值,它们大于或小于任何值,对它们进行运算后依旧会得到Infinity,二者相除会得到NaN,并不会报错;

当一个数学运算符不能被正确执行时会得到NaN(0/0),它不等于包括其本身的任何数值,只可有isNaN函数检查;

除了双向的加号,其它所有的运算符都会把数值形式的字符串转换为数值;alert( -"12.34" / "2" ) // -6.17;

不能转换则返回NaN;

一个由空白符组成的字符串会被转化为0;

如果字符串首字母非数字,parseInt/parseFloat会返回NaN,alert( parseInt('a123') )//NaN;

JavaScript中的数值计算存在精度问题(alert(0.1 + 0.2 == 0.3)//false)(浮点数不能被二进制精确的表示),解决方法可以先转化为整数,再除以10alert( (0.1*10 + 0.2*10) / 10 ) // 0.3,也可以使用toFixed;

Array

shift,pop删除对应项,并返回该项;

unshift,push;

join,split;

如果给数组的length赋值低于数组实际的长度,会删除超过的项;

push,pop直接操作最后一项,其运行速度快,效率高;

shift,unshift操作第一项,需要记住整个数组,效率低;

数组中的length方法(属性) 其实是last index+1,

 

var fruits = [] // empty array fruits[1] = 'Peach' fruits[99] = 'Apple' alert(fruits.length) // 100 (but 2 elements)

对数组也可以使用delete,但是只会删除该项的值,不会真的删除该项;

splice在原数组上更改和slice返回原数组的一个片段(新数组);

sort默认把内容转化为string,然后根据ASCII码比较;

new Array返回的是具有指定长度的值为空的数组;

Objects

obj.prop和obj[prop]二者都可以访问对象中的一项,但是值得注意的是obj.prop里prop是该项的名称,obj[prop]里的prop是该项的值,此时prop是字符串,应该加引号;

alert("key" in obj) // true, key exists使用in运算符可以用来确定是否存在某一项;

使用for in时,子项处理顺序不确定,不同浏览器有所差别;

对象中可以储存一切类型,包括函数;

可以利用对象实现链式调用,其关键在于每次的返回值为this;

 

var ladder = { step: 0, up: function() { this.step++ return this }, down: function() { this.step-- return this }, showStep: function() { alert(this.step) return this } } ladder.up().up().down().up().down().showStep() // 1

使用构造函数创建对象时,var animal = new Animal()和var animal = new Animal等同;

使用构造函数创建对象时,其关键在于this,如果构造函数返回了一个对象则会忽略this;

JS中存在Math,Date,RegExp三种内置对象,函数从某种程度上来说也是对象,String,Number,Booleans三者比较特殊,它们各自拥有一些方法;

对象转换为简单数据类型 转化为字符串

如果对象中存在toString方法,且返回一个简单类型数据,那么就返回这个字符串(所有数组默认拥有,所以一般执行到此完毕);

默认

 

alert( {key: 'value'} ) // toString for Objects outputs: [object Object] alert( [1,2] ) // toString for Arrays lists elements "1,2" alert( new Date ) // toString for Dates outputs the date as a string

可以自己定义一个toString方法

 

var user = { firstName: 'John', toString: function() { return 'User ' + this.firstName } } alert( user ) // User John

如果存在valueOf方法,且返回一个简单类型数据,那么返回这个;

alert()会触发装换为字符串

转换为数值(两种情况下发生,非常常见)

对数值进行计算的方法( Math.sin(obj),isNaN(obj))以及运算符(+,-,*,/等等)

做比较时(注:obj1==obj2,只有二者引用同一对象时才相等);Number(obj)也会转换,

数值转换规则如下

如果存在valueOf方法,且返回一个简单类型数据,那么返回这个结果;

如果对象中存在toString方法,且返回一个简单类型数据,那么就返回这个字符串;

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/68a7845d758e6af302bece55f22fb70d.html