JavaScript-2(数据类型操作详解)
字符串
单行字符串
JavaScript的字符串就是用''或""括起来的字符表示。
如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:
'I\'m \"OK\"!';
表示的字符串内容是:I'm "OK"!
转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\。
多行字符串
由于多行字符串用\n写起来比较费事,所以最新的ES6标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示:
"这是一个 多行 字符串 测试"
模板字符串
要把多个字符串连接起来,可以用+号连接:
var name = 'bushaoxun'; var age = 32; var message = '你好, ' + name + ', 你今年' + age + '岁了!'; alert(message);
如果有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:
var name = 'bushaoxun';
var age = 32;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
操作字符串
字符串常见的操作如下:
var test = "bushaoxun" //定义字符串
test.length  // 9 获取字符串长度
test[0]  // "b"  依据下标获取字符串
test.toUpperCase(); // 把一个字符串全部变为大写
test.toLowerCase();  // 把一个字符串全部变为小写
test.indexOf("xun"); // 找出指定字符串的位置
test.substring(0, 5);  // substring()返回指定索引区间的子串
数组
JavaScript的Array可以包含任意数据类型,并通过索引来访问每个元素。
数组的常见简单操作如下:
var arr = [1, 2, 5.21, 'bushaoxun', "shaoxun", true]; //定义一个数组 arr.length; //获取数组的长度。请注意,直接给Array的length赋一个新的值会导致Array大小的变化. arr[3]; //通过索引下标获取元素值 arr[3] = "xun"; //通过索引下标给数组元素重新赋值,请注意,如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化。 arr.indexOf(2); //通过indexOf()来搜索一个指定的元素的位置: arr.slice(1,3); // 对应String的substring()版本,它截取Array的部分元素,然后返回一个新的Array
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
如果要往Array的头部添加若干元素,使用unshift()方法,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; // []
sort
sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序:
var arr = ['B', 'C', 'A']; arr.sort(); arr; // ['A', 'B', 'C']
reverse
reverse()把整个Array的元素给掉个个,也就是反转:
var arr = ['one', 'two', 'three']; arr.reverse(); arr; // ['three', 'two', 'one']
splice
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
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']
join
join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:
var arr = ['A', 'B', 'C', 1, 2, 3];
arr.join('-'); // 'A-B-C-1-2-3'
多维数组
如果数组的某个元素又是一个Array,则可以形成多维数组,例如:
var arr = [[1, 2, 3], [400, 500, 600], '-'];
上述Array包含3个元素,其中头两个元素本身也是Array。
对象
JavaScript的对象是一种无序的集合数据类型,它由若干键值对组成。
JavaScript用一个{...}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。注意,最后一个键值对不需要在末尾加,,如果加了,有的浏览器(如低版本的IE)将报错。
var laobu = {
    name: 'bushaoxun',
    birth: 1985,
    school: 'No.1 Middle School',
    height: 176,
    weight: 70,
    score: 100
};
 对象赋值给变量laobu后,就可以通过变量laobu来获取laobu的属性了:
laobu.name;//"bushaoxun" laobu.birth; //1985
访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用''括起来:
var laobu = {
    name: '步绍训',
    'middle-school': 'No.1 Middle School'
};
laobu的属性名middle-school不是一个有效的变量,就需要用''括起来。访问这个属性也无法使用.操作符,必须用['xxx']来访问:
laobu['middle-school'] //"No.1 Middle School" laobu['name'] // "步绍训", 也可以用这种方式访问 name 属性.
实际上JavaScript对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。
如果访问一个不存在的属性会返回什么呢?JavaScript规定,访问不存在的属性不报错,而是返回undefined.
由于JavaScript的对象是动态类型,你可以自由地给一个对象添加或删除属性:
var xiaoming = {
    name: '小明'
};
xiaoming.age; // undefined
xiaoming.age = 18; // 新增一个age属性
xiaoming.age; // 18
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
delete xiaoming['name']; // 删除name属性
xiaoming.name; // undefined
delete xiaoming.school; // 删除一个不存在的school属性也不会报错
如果我们要检测xiaoming是否拥有某一属性,可以用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判断一个属性存在,这个属性不一定是xiaoming的,它可能是xiaoming继承得到的,
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法:
var xiaoming = {
    name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号