2017-6-12
JavaScript 简介
诞生于1995年,主要用于处理网页中的前端验证的问题,如用户名的长度,邮箱的格式等。它是运行在浏览器端的脚本语言,在可以在后台运行。
标准:ECMAScript。不同浏览器的实现方式不同,也就是引擎不同,如Chrome用的引擎是v8,很快。
javascript的实现:ECMAScript、DOM、BOM。
js代码需要写在script标签中,需要添加type属性,如:<script type="text/javascript"><script>。
alert("你好"); //向页面中弹出警告框
document.write("hello!"); //将内容输出一body标签中
console.log("321"); //在控制台中输出内容,要通过开发者工具查看
可以将js代码编写到元素的onclick属性中去,点击元素时,onclick代码会立即执行。
也可以将js代码写到a标签中的href中去,语法:javascript: 代码
<a href="#" οnclick="alert('来打我啊');">请点击</a>
<a href="javascript: alert('来打我啊x2');">请点击x2</a>
写在标签内的属性中,是不推荐使用的方法,可以编写到script标签中,或者外部的js文件中,可以将结构和行为进一步分离。
引入外部js文件,用script标签,推荐使用这种方式。
一旦script中引入了外部js文件,那标签中不能写其他内容,写了也不会执行,可创建新的script标签来写内容。
<script type="text/javascript" src="js/new_file.js">
alert("你好");//向页面中弹出警告框
document.write("hello!");//将内容输出一body标签中
console.log("321");//在控制台中输出内容,要通过开发者工具查看
</script>
以上标签中的内容不会执行的。
javascript注释:多行/* */ 单行注释://
js中严格区分大小写。
每一条语句以分号结尾。如果不写分号,浏览器会自动添加,但可能会出现错误,所以就手动添加。
忽略多余的空格和换行。
字面量和变量
字面量指一个值,一般不可变。
用var这个关键字来声明变量: var a;默认值是undefined(声明但未赋值)。 a=12; 或者 var a=12; var a, b, c=12;
标识符
所有自主命名的内容都可以叫标识符,如函数名,对象名等。
规范:
1.标识符需要以字母、$和_开头。
2.不能是关键字和保留字。
3.驼峰命名,首字母小写,后面每个单词大写。
4.es用的是Unicode编码,可以用中文命名,但不推荐使用。
五种基本数据类型:String,Number,Undefined未定义,Boolean,null空值。另外还有引用数据类型:Object。typeof null返回Object。
字符串中用/表示转义字符。如://、/'、/"、/n
typeof 检查变量的类型
在js中,所有数字都是number类型的。使用的数字大小是有范围的,超过就会返回+-Infinity,不用加引号。NaN表示一个非法的数字,本身也是number类型的,不需要加引号。注意大小写。
js中整数去处可以取得一个准确值,但进行小数运算,会得到一个近似的结果。如果要求精度高,不要用js来计算。
转换成字符串数据类型
toString()方法不会改变原变量的值,而是将转换后的值放在新的变量中。但Undefined和null不能调用。b = a.toString();
toString()函数,是把参数写在括号里的,本质上也是调toString()方法的。如:b = toString(a);但是,null值直接转换成字符串"null",undefined会转换成"undefined"。
转换成数据类型
1.使用Number()函数
如果字符串是一个合法的数字,则直接转换成对应的数字。如果不是合法的数字,则转换成NaN。如果是空串或者是含空格,则转换为0。
null 会转换成0。undefined会转换成NaN。
2.使用parseInt()函数
从字符串左侧开始解析,直到最后一个合法的整数位为止,将不合法的部分舍去。如果最左侧第一位不为合法数字,则返回NaN。对于一些特殊的字符串,如"070",在ES5中会当作十进制解析(70),在ES3标准中会当作八进制解析(56)。所以,在函数的第二个参数可以指定进制,如parseInt(a, 10),则按十进制转换。可以用于取整。
3.使用parseFloat()函数
可以解析到有效的小数。
Boolean()
转换成布尔值
只要字符串不是空串,结果都是true。只要数字不是0或NaN,结果都是true。null和undefined的结果也是false。
运算符
对两个字符串进行加法运算,会将它们拼接在一起。
任何值和字符串相加,返回的都是字符串,先将该值转换成字符串,再与字符串拼接。
为任意类型的值+" "的方法,即和空字符串相加,将其转换成字符串。
除了字符串,其余的值做加法,都会转成number再计算。如:true + false = 1;
1 + 2+"3" 结果为"33","1" +2 +3结果为"123",按照先后的顺序 运算。
除了加法运算,其他的运算都是将值转换成number再作运算。所以,可以通过减零的方式将任意数据类型转换成number类型。如:b = b - 0;
%取模运算可以得到余数。
一元运算符
非number数据作一元加减运算时,先将数据转换成number再运算。如:1 + "2" +3结果为字符串"123",而1 + +"2" +3结果为数字6。
自增和自减会对原变量产生影响。如:b = a++;先将原值赋给b,再让a增加1,或者说先使用a的原值,再让a加1。如:a = 10; console.log(a++)结果为10,此时a为11。a=a++,则a为10。
逻辑运算
!:非布尔值先转换成布尔值再取反。所以,可以为一个数据类型取两次反,来将其转换成布尔值。
&&:与。两侧同时为true才为true。短路与:如果第一个值为false,则符号右侧的第二个语句不会执行。
||:或运算。短路或:如果左侧为true,则右侧语句不会执行。
可以对非布尔值进行与或运算。
对于非布尔值,先将其转换成布尔值再进行运算,最终返回原值。
与:如果第一个值是true,返回第二个值。否则返回第一个值。
或:如果第一个值是false,则返回第二个值;否则返回第一个值。
赋值运算中,+= 符号不可以拆开。
对于非数值,先转换成数值再讲计算。但是,两个字符串进行比较时,不会转换成数字,而是按照每一位比较Unicode编码。所以,"4">"32",结果为true。
2017-6-16
相等运算符
==:比较两个不同类型的值时,首先需要转换成相同类型的值。一般转换成Number再比较是否相等。但null = 0;的结果为false。NaN不跟
任何值相等,包括它自己,但可以用isNaN()函数来判断。
===:不会进行类型转换。不同类型的值,返回false。
!=: 会对不同类型的值自动进行转换。
!==: ...
undefined和null进行相等比较时会返回true,全等比较时返回false。
三元运算符
表达式1?表达式2:表达式3 表达式1为true,执行表达式2并返回结果;表达式1为false,执行表达式3并返回结果。
运算符的优先级
JS中的 {} 只有分组的作用,没有隔离作用域的作用。
if只对后面的语句起作用,一般用代码块表示。
隐式的类型转换
字符串:可以为任意的数据类型加一个空串来将其转换为字符串。
数值:可以为任意的数据类型加上一个一元的加号来将其转换为一个数值。
布尔值:两个感叹号。!!
prompt接收的数据为字符串类型,注意和字符串类型比较时的规则。如果需要将输入数据转换成Number类型的,可以在前面加上加号+。
switch(条件表达式){
case 表达式1:
语句;
break;
case 表达式2:
语句;
break;
default:
语句;
break;
}
2017-6-19
循环终止:break, continue, 标签
如果要终止外部循环,可以在循环之前添加一个标签和冒号。若标签是“hello:”,则“break hello;”可以终止外部循环。
程序计时器:
console.time()计算程序执行的时间。如:console.time(); console.timeEnd();
两个括号里用同一个字符串作标识。