yahoo 代数 写代码 修改 inf 超出 反引号 es6
字符串是以单引号'或双引号" 括起来的任意文本:
- var carname="Volvo XC60";
- var carname='Volvo XC60';
如果
本身也是一个字符,那就可以用
- '
括起来:
- ""
- var answer="It's alright";
如果
本身也是一个字符,那就可以用
- "
括起来:
- ''
- var answer='He is called "Johnny"';
如果字符串内部既包含
又包含
- '
怎么办?可以用转义字符
- "
来标识,比如:
- \
- 'I\'m \"OK\"!';
转义字符
可以转义很多字符,比如
- \
表示换行,
- \n
表示制表符,字符
- \t
本身也要转义,所以
- \
表示的字符就是
- \\
。
- \
多行字符串
由于多行字符串用
写起来比较费事,所以最新的 ES6 标准新增了一种多行字符串的表示方法,用反引号 ` ... ` 表示:
- \n
- `这是一个
- 多行
- 字符串`;
模板字符串
要把多个字符串连接起来,可以用
号连接:
- +
- var name = '小明';
- var age = 20;
- var message = '你好,
- ' + name + ',
- 你今年' + age + '岁了 ! ';
- alert(message);
如果有很多变量需要连接,用
号就比较麻烦。ES6 新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:
- +
- var name = '小明';
- var age = 20;
- var message = `你好,
- $ {
- name
- }, 你今年$ {
- age
- }岁了 ! `;
- alert(message);
length
获取字符串长度
- var s = 'Hello,
- world ! ';
- s.length; // 13
要获取字符串某个指定位置的字符,使用类似 Array 的下标操作,索引号从 0 开始:
- var s = 'Hello,
- world ! ';
- s[0]; // 'H'
- s[6]; // ' '
- s[7]; // 'w'
- s[12]; // '!'
- s[13]; // undefined 超出范围的索引不会报错,但一律返回undefined
需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:
- var s = 'Test';
- s[0] = 'X';
- alert(s); // s仍然为'Test'
JavaScript 为字符串提供了一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:
toUpperCase
toUpperCase() 把一个字符串全部变为大写:
- var s = 'Hello';
- s.toUpperCase(); // 返回'HELLO'
toLowerCase
把一个字符串全部变为小写:
- toLowerCase()
- var s = 'Hello';
- var lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower
- lower; // 'hello'
indexOf
indexOf() 会搜索指定字符串出现的位置:
- var s = 'hello,
- world';
- s.indexOf('world'); // 返回7
- s.indexOf('World'); // 没有找到指定的子串,返回-1
lastIndexOf
lastIndexOf() 从字符串尾部向头部搜索指定字符:
- var s = 'hello';
- s.lastIndexOf('l'); //返回 3
substr
substr() 截取字符串:
- var s = 'hello';
- s.substr(1, 2); //返回 'el'
- // 从索引1开始截取长度为2的字符串
substring
返回指定索引区间的子串:
- substring()
- var s = 'hello,
- world's.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
- s.substring(7); // 从索引7开始到结束,返回'world'
trim
trim() 去除字符串两边空格:
- var s = 'hello';
- s.trim(); //返回 'hello'
charAt
charAt() 获取指定位置字符:
- var s = 'hello';
- s.charAt(1); //返回 'e'
match 和 search
match() 返回匹配字符串的数组,如果没有匹配则返回 null
search() 返回匹配字符串的首字符位置索引:
- var str1 = "welcome to the world of world JS!";
- var str2 = str1.match("world");
- var str3 = str1.search("world");
- alert(str2[0]); // 结果为"world"
- alert(str3); // 结果为15
slice
slice(),对字符串进行切片操作:
- var str1 = "abcdefgh";
- var str2 = str1.slice(2, 4); //结果为"cd",从索引2开始,截取到索引4,不包含索引4
- var str3 = str1.slice(4); //结果为"efgh",从索引4开始,截取到字符串末尾
- var str4 = str1.slice(2, -1); //结果为"cdefg",从索引2开始,截取到字符串末尾,不包含末尾字符
- var str5 = str1.slice( - 3, -1); //结果为"fg",从索引-3开始,截取到字符串末尾索引-1,不包含末尾字符
replace
replace(),替换字符串:
- var s = 'hello,
- jack';
- s.replace('jack', 'michael'); //返回'hello,michael'
split
split(),分割字符串:
- var str1 = "一,二,三,四,五,六,日";
- var strArray = str1.split(","); //返回数组:["一", "二", "三", "四", "五", "六", "日"]
JavaScript 不区分整数和浮点数,统一用 Number 表示,以下都是合法的 Number 类型:
- 123; // 整数123
- 0.456; // 浮点数0.456
- 1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
- - 99; // 负数
- NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
- Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity
计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用 0x 前缀和 0-9,a-f 表示,例如:
,
- 0xff00
,等等,它们和十进制表示的数值完全一样。
- 0xa5b4c3d2
- 2进制: 1111 0011 1101 0100 <-----> 16进制:0xF3D4 <-----> 10进制:62420
- 2进制: 1 111 001 111 010 100 <-----> 8进制:0171724
布尔值和布尔代数的表示完全一致,一个布尔值只有
、
- true
两种值,要么是
- false
,要么是
- true
,可以直接用
- false
、
- true
表示布尔值,实际运算中 true=1,false=0,也可以通过布尔运算计算出来:
- false
- true; // 这是一个true值
- false; // 这是一个false值
- 2 > 1; // 这是一个true值
- 2 >= 3; // 这是一个false值
数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript 的数组可以包括任意数据类型。例如:
- [1, 2, 3.14, 'Hello',null,true];
上述数组包含 6 个元素。数组用
表示,元素之间用
- []
分隔。
- ,
另一种创建数组的方法是通过
函数实现:
- Array()
- new Array(1, 2, 3); // 创建了数组[1, 2, 3]
然而,出于代码的可读性考虑,强烈建议直接使用
。
- []
数组的元素可以通过索引来访问。请注意,索引的起始值为
:
- 0
- var arr = [1, 2, 3.14, 'Hello', null, true];
- arr[0]; // 返回索引为0的元素,即1
- arr[5]; // 返回索引为5的元素,即true
- arr[6]; // 索引超出了范围,返回undefined
要取得
的长度,直接访问
- Array
属性:
- length
- var arr = [1, 2, 3.14, 'Hello', null, true];
- arr.length; // 6
请注意,直接给
的
- Array
赋一个新的值会导致
- length
大小的变化:
- Array
- var arr = [1, 2, 3];
- arr.length; // 3
- arr.length = 6;
- arr; // arr变为[1, 2, 3, undefined, undefined, undefined]
- arr.length = 2;
- arr; // arr变为[1, 2]
Array 可以通过索引把对应的元素修改为新的值,因此,对
的索引进行赋值会直接修改这个
- Array
:
- Array
- var arr = ['A', 'B', 'C'];
- arr[1] = 99;
- arr; // arr现在变为['A', 99, 'C']
请注意,如果通过索引赋值时,索引超过了范围,同样会引起
大小的变化:
- Array
- var arr = [1, 2, 3];
- arr[5] = 'x';
- arr; // arr变为[1, 2, 3, undefined, undefined, 'x']
大多数其他编程语言不允许直接改变数组的大小,越界访问索引会报错。然而,JavaScript 的
却不会有任何错误。在编写代码时,不建议直接修改
- Array
的大小,访问索引时要确保索引不会越界。
- Array
indexOf
与 String 类似,
也可以通过
- Array
来搜索一个指定的元素的位置:
- indexOf()
- var arr = [10, 20, '30', 'xyz'];
- arr.indexOf(10); // 元素10的索引为0
- arr.indexOf(20); // 元素20的索引为1
- arr.indexOf(30); // 元素30没有找到,返回-1
- arr.indexOf('30'); // 元素'30'的索引为2
slice
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
如果要往
的头部添加若干元素,使用
- 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']
对数字元素进行 sort 时,会出现未真实按照数字大小排序的情况:
- arr = [1, 5, 2, 100];
- arr.sort();
- console.log(arr) // 排序结果:[1, 100, 2, 5]
- //这是因为默认以字符的ASCII码进行排序,首字符相同,则比较第2位。故并没有按照数字的真实大小进行排序
解决方法:
- arr=[1,5,2,100];
- function intSort(a,b){
- if(a>b){
- return1; }
- else if(a<b){
- return-1; }
- else {
- return0
- }
- }
- arr.sort(intSort);
- console.log(arr) // 排序结果:[1, 2, 5, 100]
- //intSort函数也可写为如下形式
- //function intSort(a,b){
- // return a-b;
- //}
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']
请注意,
方法并没有修改当前
- 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
join() 方法是一个非常实用的方法,它把当前
的每个元素都用指定的字符串连接起来,然后返回连接后的字符串:
- Array
- var arr = ['A', 'B', 'C', 1, 2, 3];
- arr.join(' - '); // 'A-B-C-1-2-3'
如果
的元素不是字符串,将自动转换为字符串后再连接。
- Array
JavaScript 的对象是一组由键 - 值组成的无序集合,例如:
- varperson = {
- name: 'Bob',
- age: 20,
- tags: ['js', 'web', 'mobile'],
- city: 'Beijing',
- hasCar: true,
- zipcode: null
- };
JavaScript 对象的键都是字符串类型,值可以是任意数据类型。上述
对象一共定义了 6 个键值对,其中每个键又称为对象的属性,例如,
- person
的
- person
属性为
- name
,
- 'Bob'
属性为
- zipcode
。
- null
要获取一个对象的属性,我们用
的方式:
- 对象变量.属性名
- person.name; // 'Bob'
- person.zipcode; // null
访问属性是通过
操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用
- .
括起来:
- ''
- varxiaohong = {
- name: '小红',
- 'middle-school': 'No.1 Middle School'
- };
xiaohong 的属性名
不是一个有效的变量,就需要用
- middle-school
括起来。访问这个属性也无法使用
- ''
操作符,必须用
- .
来访问:
- ['xxx']
- xiaohong['middle - school']; // 'No.1 Middle School'
- xiaohong['name']; // '小红'
- xiaohong.name; // '小红'
也可以用
来访问
- xiaohong['name']
的
- xiaohong
属性,不过
- name
的写法更简洁。我们在编写 JavaScript 代码的时候,属性名尽量使用标准的变量名,这样就可以直接通过
- xiaohong.name
的形式访问一个属性了。
- object.prop
实际上 JavaScript 对象的所有属性都是字符串,不过属性对应的值可以是任意数据类型。
如果访问一个不存在的属性会返回什么呢?JavaScript 规定,访问不存在的属性不报错,而是返回
:
- undefined
- var xiaoming = {
- name: '小明'
- };
- xiaoming.age; // 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
- varxiaoming = {
- name: '小明',
- birth: 1990,
- school: 'No.1 Middle School',
- height: 1.70,
- weight: 65,
- score: null
- };
- 'name'inxiaoming;// true'grade'inxiaoming;// false
不过要小心,如果
判断一个属性存在,这个属性不一定是
- in
的,它可能是
- xiaoming
继承得到的:
- xiaoming
- 'toString' in xiaoming; // true
因为
定义在
- toString
对象中,而所有对象最终都会在原型链上指向
- object
,所以
- object
也拥有
- xiaoming
属性。
- toString
要判断一个属性是否是
自身拥有的,而不是继承得到的,可以用
- xiaoming
方法:
- hasOwnProperty()
- var xiaoming = {
- name: '小明'
- };
- xiaoming.hasOwnProperty('name'); // true
- xiaoming.hasOwnProperty('toString'); // false
Undefined 类型
Undefined 类型只有一个值,即 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。
当函数无明确返回值时,返回的也是值 "undefined";
Null 类型
另一种只有一个值的类型是 Null,它只有一个专用值 null,即它的字面量。值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
尽管这两个值相等,但它们的含义不同。undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象(在讨论 typeof 运算符时,简单地介绍过这一点)。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
参考资料:
1. http://www.w3cschool.cn/javascript/js-datatypes.html
2. http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434499190108eec0bdf14e704a09935cd112e501e31a000
3. http://www.cnblogs.com/yuanchenqi/articles/6893904.html
JavaScript 数据类型
来源: http://www.bubuko.com/infodetail-2086773.html