发表于: 2017-03-28 21:34:42
1 1182
任务二
今天完成的事情
- 1.弄清楚js的传值方式有哪几种,原始类型和对象类型作为函数参数时有什么区别。
- 2.解决icon-font会出现一段多余高度的问题。
- 3.任务二的样式编写。
- 4.js学习笔记整理-温故而知新。
明天计划的事情
- 1.完成任务二的js部分
- 2.学习并实现洗牌算法。
遇到的问题
1.遇到的问题抽象出来如下:
var numArray=[1,2,3,4];
function changeArray(array) {
array.splice(0,1);
}
changeArray(numArray);
console.log(numArray);
打印出来结果是[2,3,4];没毛病,因为数组是对象,对象作为函数参数时,传递的是引用,所以内部的改变会影响到外部的数组,那么我们只要保存好数组的值再重新传递就可以了。代码如下
var numArray=[1,2,3,4,5,6,7,8,9];
function changeArray(array) {
var orignArrray=[];
orignArrray=array.slice();
array.splice(0,1);
array=orignArrray.slice();
}
changeArray(numArray);
console.log(numArray);按按照常理来说,打印出来的结果是[1,2,3,4],实际上结果是[2,3,4]。为什么呢?因为js只有值传递,根本没有引用传递,当数组或者对象作为形参时,传递的也是一个值,不过这个值比较特殊,是一个复制的对象,这个复制的数据在内存中有一块单独的空间,只不过空间里存储的数据地址和原始对象存储的数据地址相同,两者都指向同一个数据块,所有修改数据块的内容会影响原始的对象,同样的当复制的对象所指向的数据块改变时,不会对原始对象的指向造成任何影响。
收获
- 1.理清楚了js的传参方式。
- 2.能熟练使用iocn-font。
js学习笔记(主要摘录自 阮一峰-js标准参考教程)
数值
整数和浮点数
JavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此.
在JavaScript语言的底层,根本没有整数,所有数字都是小数(64位浮点数)
由于浮点数不是精确的值,所以涉及小数的比较和运算要特别小心。
NaN
NaN是JavaScript的特殊值,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
NaN是一个特殊的值,数据类型还是number。
全局函数
parseInt
parseInt方法用于将字符串转为整数
可以接收2个参数,第二个参数表示要转换的进制,默认为0.
parseFloat
parseFloat方法用于将一个字符串转为浮点数
字符串
定义
字符串默认只能放在一行,如果放在多行会报错,可以通过\
实现换行。
字符串与数组
字符串与数组类似,但是无法调用数组的方法。
如果直接对字符串使用数组的join方法,会报错不存在该方法。但是,可以通过call
方法,间接对字符串使用join
方法。
不过,由于字符串是只读的,那些会改变原数组的方法,比如push()
、sort()
、reverse()
、splice()
都对字符串无效,只有将字符串显式转为数组后才能使用
字符集
JavaScript使用Unicode字符集。也就是说,在JavaScript引擎内部,所有字符都用Unicode表示。
JavaScript不仅以Unicode储存字符,还允许直接在程序中使用Unicode编号表示字符,即将字符写成\uxxxx的形式,其中xxxx代表该字符的Unicode编码。
解析代码的时候,JavaScript会自动识别一个字符是字面形式表示,还是Unicode形式表示。输出给用户的时候,所有字符都会转成字面形式。下面代码输出结果为@。
var a='\u00A9';
console.log(a);
UTF-16有两种长度:对于U+0000
到U+FFFF
之间的字符,长度为16位(即2个字节);对于U+10000
到U+10FFFF
之间的字符,长度为32位(即4个字节),而且前两个字节在0xD800
到0xDBFF
之间,后两个字节在0xDC00
到0xDFFF
之间。举例来说,U+1D306写成UTF-16就是0xD834 0xDF06
。浏览器会正确将这四个字节识别为一个字符,但是JavaScript内部的字符长度总是固定为16位,会把这四个字节视为两个字符。
var s = '\uD834\uDF06';
console.log(s);
console.log(s.length);//2
console.log(/^.$/.test(s)); // false
console.log(s.charAt(0));//"
console.log(s.charAt(1));//"
console.log(s.charCodeAt(0));//55348
console.log(s.charCodeAt(1));//50709
上面代码说明,对于于U+10000到U+10FFFF之间的字符,JavaScript总是视为两个字符(字符的length属性为2),用来匹配单个字符的正则表达式会失败(JavaScript认为这里不止一个字符),charAt方法无法返回单个字符,charCodeAt方法返回每个字节对应的十进制值。所以处理的时候,必须把这一点考虑在内。
如果要完成字符串相关操作,就必须判断字符是否落在0xD800到0xDFFF这个区间。
评论