JavaScript学习笔记(java不同之处)

来源:互联网 发布:python 手写识别 编辑:程序博客网 时间:2024/05/29 19:26
一.比较运算符:
    1.JavaScript允许对任意数据类型做比较:
false == 0; // true false === 0; // false
JavaScript在设计时,有两种比较运算符:
    第一种是==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
    第二种是===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
    由于JavaScript这个设计缺陷,不要使用==比较,始终坚持使用===比较。
    2.另一个例外是NaN这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN的方法是通过isNaN()函数:
isNaN(NaN); // true
3.浮点数的比较:要比较浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个發值
   
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

二、null和undefined :undefined表示未定义,仅仅在判断函数参数是否传递的情况下有用
三、变量一般用var来申明,但在设计之初的时候允许不加var,但一个变量如果没有通过var申明就被使用,那        该变量就自动被申明为全局变量
     为了改变这个设计缺陷,ECMA推出了strict模式,即在代码第一行写上 ' use strict ';强制通过var申明变量
四、多行字符串(注意使用的是 笔记本数字1左边的按键)
由于多行字符串用\n来换行比较费事,所以ES6退出用 `...`来表示
五、模板字符串(注意使用的是 笔记本数字1左边的按键)
要把多个字符串连接起来,可以用+号连接,但如果特别多变量就很麻烦。ES6新增了一种模板字符串
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
六、操作字符串:字符串具有索引,可以根据索引获得字符,但需要注意的是,字符串是不可变的,如果对字符串某个索引赋值,不会错但也没有效果
七、操作数组:JavaScript的数组与java不同,如果给Array的length值赋新值会导致Array的长度发生变化
    请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化:
var arr = [1, 2, 3];
arr[5] = 'x';
arr; // arr变为[1, 2, 3, undefined, undefined, 'x']
数组的slice方法就是对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array: 
var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: ['A', 'B', 'C']
arr.slice(3); // 从索引3开始到结束: ['D', 'E', 'F', 'G']
注意到slice()的起止参数包括开始索引,不包括结束索引。

如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
var aCopy = arr.slice();
aCopy; // ['A', 'B', 'C', 'D', 'E', 'F', 'G']
aCopy === arr; // false   
   数组的push和pop方法,push()方法向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除
var arr = [1, 2];
arr.push('A', 'B'); // 返回Array新的长度: 4
arr; // [1, 2, 'A', 'B']
arr.pop(); // pop()返回'B'
arr; // [1, 2, 'A']
arr.pop(); arr.pop(); arr.pop(); // 连续pop 3次
arr; // []
arr.pop(); // 空数组继续pop不会报错,而是返回undefined
arr; // []
unshift和shift: unshift()向Array的头部添加若干元素,shift()将Array的第一个元素删掉;
var arr = [1, 2];
arr.unshift('A', 'B'); // 返回Array新的长度: 4
arr; // ['A', 'B', 1, 2]
arr.shift(); // 'A'
arr; // ['B', 1, 2]
arr.shift(); arr.shift(); arr.shift(); // 连续shift 3次
arr; // []
arr.shift(); // 空数组继续shift不会报错,而是返回undefined
arr; // []
   splice()方法是修改Array的万能方法,它可以从指定的索引位置删除若干元素,然后再从该位置添加若干元素
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 删除的元素为 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 没有删除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
    concat()方法把当前的Array和另一个Array连接起来,并返回一个新的Array:
var arr = ['A', 'B', 'C'];
var added = arr.concat([1, 2, 3]);
added; // ['A', 'B', 'C', 1, 2, 3]
arr; // ['A', 'B', 'C']
        请注意,concat()方法并没有修改当前Array,而是返回了一个新的Array。
实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:
var arr = ['A', 'B', 'C'];
arr.concat(1, 2, [3, 4]); // ['A', 'B', 'C', 1, 2, 3, 4]
    join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:
var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'
    如果Array的元素不是字符串,将自动转换为字符串后再连接。
       多维数组:如果数组的某个元素又是一个Array,则可以形成多维数组,例如:

var arr = [[1, 2, 3], [400, 500, 600], '-'];
上述Array包含3个元素,其中头两个元素本身也是Array

八、对象
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};

1.javaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错。

如果属性名称包含特殊字符,必须用' '括起来,如
访问不存在属性不会报错,而是返回undefined。delete删除一个属性删除不存在的属性不会报错

2.如果我们要检测对象是否具有某个属性,可以用in操作符
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'name' in xiaoming; // true
'grade' in xiaoming; // false

不过如果in判断一个属性存在,这个属性不一定是这个对象的,可能是其继承得到
'toString' in xiaoming; // true

要判断一个属性是否是该对象拥有,而不是继承得到,可以用hasOwnProperty()方法
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false


    

0 0