发表于: 2017-03-28 21:34:42

1 1182


任务二

今天完成的事情

  1. 1.弄清楚js的传值方式有哪几种,原始类型和对象类型作为函数参数时有什么区别。
  2. 2.解决icon-font会出现一段多余高度的问题。
  3. 3.任务二的样式编写。
  4. 4.js学习笔记整理-温故而知新。

明天计划的事情

  1. 1.完成任务二的js部分
  2. 2.学习并实现洗牌算法。

遇到的问题

1.遇到的问题抽象出来如下:

var numArray=[1,2,3,4];
function changeArray(array) {
array.splice(0,1);
}
changeArray(numArray);
console.log(numArray);
  1. 打印出来结果是[2,3,4];没毛病,因为数组是对象,对象作为函数参数时,传递的是引用,所以内部的改变会影响到外部的数组,那么我们只要保存好数组的值再重新传递就可以了。代码如下

  2. 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只有值传递,根本没有引用传递,当数组或者对象作为形参时,传递的也是一个值,不过这个值比较特殊,是一个复制的对象,这个复制的数据在内存中有一块单独的空间,只不过空间里存储的数据地址和原始对象存储的数据地址相同,两者都指向同一个数据块,所有修改数据块的内容会影响原始的对象,同样的当复制的对象所指向的数据块改变时,不会对原始对象的指向造成任何影响。


  3. 收获

  1. 1.理清楚了js的传参方式。
  2. 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+0000U+FFFF之间的字符,长度为16位(即2个字节);对于U+10000U+10FFFF之间的字符,长度为32位(即4个字节),而且前两个字节在0xD8000xDBFF之间,后两个字节在0xDC000xDFFF之间。举例来说,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这个区间。






返回列表 返回列表
评论

    分享到