关于环境的话,我就在记事本里写,保存为html,然后在firefox里面测试,
当然写代码比较好的环境是notepad啦
顺便分享一下
notepad
提取码:qng8
firefox里面按F12,或者右键检查元素,然后选择控制台,就可以开始写代码了,比较不错的临时环境…我就是这样弄得
NaN(not a numbei)一般出现在算术运算的结果不是数字(如求负数的平方根)
判断一个数是不是NaN
isNaN(NaN);
true
isNaN(1);
false
字符串的拼接
var message = '你好, ' + name + ', 你今年' + age + '岁了!';
var message = `你好 ${name} 你今年${age}岁了!`;
有两种写法,第一种就是用片段型的一部分一部分写,中间用+连接,变量不需要引号,其他的内容用’'号引起来
第二种就是一句话,用的是键盘上1左边的`这个符号,不是引号…(一定要记住)然后变量用
格
式
就
可
以
,
然
后
会
自
动
把
{}格式就可以,然后会自动把
格式就可以,然后会自动把{}的内容用变量的值替换
在字符串里有’,或者"的时候,需要用到转义符,有时候会出现这种问题,默认的话是’'和最近的配对,如果不转移的话会报错
var x='I\'m \"OK\"!';
获得字符串长度
var s = 'Hello, world!';
s.length; // 13
toUpperCase()
把一个字符串全部变为大写,但这个字符串本身不会改变,只会输出一个变化后的值,如果需要改变的话用赋值语句即可
toLowerCase()把一个字符串全部变为小写
var s = 'Hello';
s.toUpperCase(); // 返回'HELLO'
s;//返回"Hello"s本身无任何变化
var lower = s.toLowerCase(); // 返回'hello'并赋值给变量lower ,s本身也无任何变化
lower; // 'hello'
indexOf()会搜索指定字符串或者字符出现的位置:
var s = 'hello, world';
s.indexOf('world'); // 返回7 ,对应的第一个字符的位置
s.indexOf('World'); // 没有找到指定的子串,返回-1
s.indexOf('e');//返回1
s.indexOf('o');//返回4,第一个出现的位置
substring()返回指定索引区间的子串:
var s = 'hello, world'
s.substring(0, 5); // 从索引0开始到5(不包括5),返回'hello'
s.substring(7); // 从索引7开始到结束,返回'world'
s.substring();//返回全部
===不仅判断值,也判断属性
1=='1' //true
1==='1'//false
数组操作
javascript的数组不止可以储存数字,字符,字符串都可以
获得数组长度
var arr=[1,2,'a'];
arr.length; //返回3
indexOf返回值对应的位置
var arr=[1,2,'a'];
arr.indexOf(1); //返回0
片段截取
slice(a,b)从a开始截取到b为止,不包括 b
var arr=[1,2,3,'a','asda'];
arr.slice(0, 3); // 从索引0开始,到索引3结束,但不包括索引3: [ 1, 2, 3 ],arr本身无变化
arr.slice(3); // 从索引3开始到结束:[ "a", "asda" ]
如果不给slice()传递任何参数,它就会从头到尾截取所有元素。利用这一点,我们可以很容易地复制一个Array
var b=arr.slice();//b变成了[ 1, 2, 3, "a", "asda" ]
a===b//false
arr.slice()===arr//false提取的字串和原字符不相等
arr.slice()==arr//false
push()向Array的末尾添加若干元素,pop()则把Array的最后一个元素删除掉:
var arr=[];
arr.push('A', 'B'); // 返回Array新的长度: 2
arr.pop(); // pop()返回'B'
如果要往Array的头部添加若干元素,使用unshift()方法,shift()方法则把Array的第一个元素删掉:
var arr=[1];
arr.unshift('A', 'B'); // 返回Array新的长度: 3
arr;// [ "A", "B", 1 ]
arr.shift();//返回'A'
sort()可以对当前Array进行排序,它会直接修改当前Array的元素位置,直接调用时,按照默认顺序排序修改(a被修改了)
var a=[2,1,'A'];
a.sort();//返回[ 1, 2, "A" ]
reverse()把整个Array的元素给掉个个,也就是反转(a被修改了)
var a=[2,1,'A'];
a.reverse();//返回[ "A", 1, 2 ]
splice()方法是修改Array的“万能方法”,它可以从指定的索引开始删除若干元素,然后再从该位置添加若干元素:
splice(begin,num,value)
begin时开始的索引值,num是删除的个数,value是添加的元素的值,可以为空,添加的位置就是begin的位置
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: 请注意,concat()方法并没有修改当前Array,而是返回了一个新的Array。
实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:
var a=[1];
a.concat('1');//返回Array [ 1, "1" ]
a;//Array [ 1 ],没有变化
a.concat('1',['a',2]);// [ 1, "1", "a", 2 ]自动拆开里面的数组
join()方法是一个非常实用的方法,它把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
var arr=[1,2,3,'adad'];
arr.join('233');//返回"123322333233adad",arr无变化
小结一下
原array改变的有splice,reverse,sort,shift,unshift,pop,push,
原array不改变的有join,concat,slice,.substring,toUpperCase,toLowerCase
var s="xixi";
s[0]='s';
s;//xixi
不会报错,但没有效果
访问属性是通过.操作符完成的,但这要求属性名必须是一个有效的变量名。如果属性名包含特殊字符,就必须用’'括起来,
var xiaohong = {
name: '小红',
'middle-school': 'No.1 Middle School'
};
xiaohong的属性名middle-school不是一个有效的变量,(因为有-)就需要用’'括起来,访问这个属性也无法使用.操作符,必须用[‘xxx’]来访问
xiaohong['middle-school']; // 'No.1 Middle School'
xiaohong['name']; // '小红'
xiaohong.name; // '小红'
如果我们要检测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继承得到的,比如说像toString这个是系统函数,但也认为xiaoming继承了
'toString' in xiaoming; // true
因为toString定义在object对象中,而所有对象最终都会在原型链上指向object,所以xiaoming也拥有toString属性
要判断一个属性是否是xiaoming自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法
var xiaoming = {
name: '小明'
};
xiaoming.hasOwnProperty('name'); // true
xiaoming.hasOwnProperty('toString'); // false
删除属性,如果这个属性不在对象里,也不会报错,只是没效果
var xiaoming = {
name: '小明',
birth: 1990,
school: 'No.1 Middle School',
height: 1.70,
weight: 65,
score: null
};
'school' in xiaoming//true
delete xiaoming.school//true
'school' in xiaoming//false
delete xiaoming.school//true
JavaScript把null、undefined、0、NaN和空字符串’’"视为false,其他值一概视为true
console.log()
在控制台输出信息,控制台需要可见 (浏览器按下 F12 打开控制台)
prompt(text,defaultText)
text可选。要在对话框中显示的纯文本。defaultText可选,默认的输入文本如果用户不输入的话就会返回的是默认文本
如果用户单击提示框的取消按钮,则返回 null。如果用户单击确认按钮,则返回输入字段当前显示的文本
在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入。在调用 prompt() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句
parseFloat() 函数可解析一个字符串,并返回一个浮点数
该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字.
该函数往往和prompt一起使用,因为在prompt里面不管是输入字符还是数字都返回的是字符串,但有时候我们需要的是数字,所以需要用这个函数
看之前的script教程,如果要提取属性,不能用in,因为会有对象继承的属性,但我发现好像…没有
var o = {
name: 'Jack',
age: 20,
city: 'Beijing'
};
for (var key in o) {
alert(key); // 'name', 'age', 'city'
}
for (var key in o) {
if (o.hasOwnProperty(key)) {
alert(key); // 'name', 'age', 'city'
}
}
}
两个效果好像一样
由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for … in循环可以直接循环出Array的索引,不过索引是’0’,‘1’,‘2’,不是数字是字符
var a = ['A', 'B', 'C'];
for (var i in a) {
alert(i); // '0', '1', '2'
alert(a[i]); // 'A', 'B', 'C'
}