javascript是1995年网景创立 原名为livescript后改名为javascript;(当时工作于 Netscape 的 Brendan Eich (布兰登·艾奇),着手为即将在 1995 年发行的 Netscape Navigator 2.0 开发一个称之为 LiveScript 的脚本语言,当时的目的是在浏览器和服务器(本来要叫它 LiveWire)端使用它。Netscape 与 Sun 共同完成 LiveScript 实现。)
javascript是运行在客户端的脚本语言,是嵌套在html中,能够被浏览器直接解析(与浏览器内核有关);可简称为js。
js作用:主用于写网页特效,表单验证,增加用户与浏览器之间的交互效果。
js组成:ECMAScript(组织,欧洲计算机制造商协会,用于规定js语法规范;ES5即是说ECMAScript的第五版)、BOM(浏览器对象模型)、DOM(文档对象模型)
在js中注释的方法有两种:
“//”为单行注释
“/* */”为多行注释
js的标签为:
<script></script> <script type="text/javascript"></script> ; 一般我会写于</html>之后,也就是说其实可以写在body里,一般也会推荐写在</body>的前面:
1.避免因为加载(下载)脚本或脚本运行过慢,阻塞页面。
2.防止脚本运行时,页面未加载完成,造成script要操作的DOM结点没有加载完成而出错。
但是个人习惯则写在</html>之后;用于控制html和css。
js的输出语句:①document.write("内容"); //输出在浏览器页面上
②alert("内容"); //以弹窗的方式输出
③console.log("内容"); //输出在控制台中(F12)主用于调试bug 一般最常用的也是console.log;他会在代码错误的时候提供信息。
注:①如输出的为字母或中文,用引号包起来,可单引号也可多引号;除非他是变量。
②如输出的为数字,引号可加可不加。
③在浏览器页面中换行用<br/>;在非浏览器中(弹窗,控制台等)换行用 。
④如果输出的是变量,一定不能加引号。(加引号就会当作字符串,会原样输出)
⑤如果输出的有字符串和变量,字符串和变量之间用“+”进行连接。(eg:document.write(“我的名字是” + userName + "<br/>"))
js(常量):在程序运行的过程中,始终不变的值(量)叫常量。(数值型:整数、小数;字符型:“”或‘’括起来的字符串)
js(变量):在程序运行的过程中,值可能会发生改变的量叫变量。(输出变量时不能加引号;先定义变量,在使用变量)
定义变量的两种方式:
①显示定义:var 变量名 = 值 (var为关键字(定义) var与变量名之间有空格,变量名与=与值之间的空格非必加,但是个人认为为了代码看着不拥挤以及美观这里推荐加上空格)
②隐示定义:变量名 = 值
eg:
var a = 1; //把1赋值给a;
var b = "abc";
a = 2; //已经var 了一个a 则改变a值时无需再var一个a;
定义的变量名的注意事项:
①字母、数字、下划线、$可以任意组成变量名(但不能以数字开头;禁止用中文命名)
②不能使用关键字和保留字(关键字:js中的关键字可用于表示控制语句的开始或结束,或者用于执行特定操作等。保留字:其实就是在以后可能会作为关键字的。)
③要做到见名识意(语义化)
④关于驼峰式命名:大驼峰、小驼峰(大驼峰:多个单词组成,每一个单词的首字母大写(UserName);小驼峰:多个单词组成,第一个单词首字母小写,其他单词首字母大写(userName))
js 的数据类型:
①基本数据类型:数值型(number)、字符串(string)、布尔(boolean)
②特殊数据类型:underfined(定义了对象,未赋值)、null(空)
③复合数据类型(一般叫引用数据类型):对象(object):{ }(对象)、[ ](数组)
也可分为两类:一般也只说两类:
①基本数据类型:数值型(number)、字符串(string)、布尔(boolean)、underfined(定义了对象,未赋值)、null(空)
②引用数据类型:对象(object):{ }(对象)、[ ](数组)
在①中数值型为:整数,小数; 字符串为:单/双引号包起来的都是字符串; 布尔为:true、false
注:在引号中嵌套:外面是双引号,里面就为单引号;反之。
引用数据类型操作的是引用地址
检测数据类型的方法:
typeof:
typeof 变量/值(typeof与变量/值之间有空格)
typeof(变量/值)(typeof与(变量/值之间无空格))
eg:console.log(typeof num);
检测数据类型的时候,检测出来的值都是加了引号的(所以他本身是字符串),但是在控制台中显示不出来。即:
只要多写一个typeof 检测出来的都是"string",也就是用typeof检测另一个typeof出来的值 都是"string"
typeof弊端:在检测为null的时候会显示为object。
准确判断一个数据的类型:
object.prototype.toString.call()
let a = "string"; let b = 111; let c = {}; let d = [1, 2, 3]; let e = function () { console.log("eee"); } let f = undefined; let g = null; let h = new Date(); let i = /test/; let j = true; console.log(Object.prototype.toString.call(a) === '[object String]');//true console.log(Object.prototype.toString.call(b) === '[object Number]');//true console.log(Object.prototype.toString.call(c) === '[object Object]');//true console.log(Object.prototype.toString.call(d) === '[object Array]');//true console.log(Object.prototype.toString.call(e) === '[object Function]');//true console.log(Object.prototype.toString.call(f) === '[object Undefined]');//true console.log(Object.prototype.toString.call(g) === '[object Null]');//true console.log(Object.prototype.toString.call(h) === '[object Date]');//true console.log(Object.prototype.toString.call(i) === '[object RegExp]');//true console.log(Object.prototype.toString.call(c) === '[object Object]');//true console.log(Object.prototype.toString.call(d) === '[object Object]');//false console.log(Object.prototype.toString.call(e) === '[object Object]');//false
js运算符:就是操作运算的符号:就像 &&(且) !(非) + (是加号但又不只是加号) ?(条件运算符里的条件)等;
js表达式:可以为常量、变量、一个式子。
js的算术运算符:
①单目(一元):++ - -
②双目(二元):+ - * / %(求余/求模)(任何一个数%10都能把这个数的个位数取出来)
关于①:操作数必须是变量;
i++ 和 ++i 的区别:
相同点:变量i都会自增1;
不同点:i++先让 i 值赋给整个表达式(也就是整个表达式的值=i),再自增1;反之++i先自增1,再赋值给整个表达式(也就是整个表达式的值为 i+1)。
关于②:
在 - * / %中:
①如果两边都是数值型,可以进行正常运算;
②如果有一侧是纯数字字符串,js会自动将其转为数值型参与计算;
③如果有一侧是非数字字符串,结果为NaN(NaN:not a number 不是一个数 并且NaN本身也不等于本身,NaN的数据类型是number)
eg:
console.log( 3 - 1 ); //2
console.log("3" - 1); //2
console.log("3" - "a"); //NaN
console.log("3" / 3); //1
console.log("3" % 7); //3
+:
①两侧都是数值型时,可以正常运算;
②只要有一侧是字符串,“+” 就代表连接 "a" + 1 = a1 ;
赋值运算符:+= -= *= /= %=
+= :
var x = 10;
x += 10; // x = x + 10; //20
-=:
var x = 9;
x -= 10; // x = x - 10; //-1
*=:
var y = 1;
y *= 10; // y = y * 10; //100
...
关系运算符:(比较运算符)
> < ==(等于) >= <= !=(不等于) ===(全等) !==(不全等)
比较的结果为布尔值:true,false
== 与 ===的区别:
==:不看数据类型,只要值相等,则true; (null == undefined 为true;值都无)
===:先看数据类型再看值,若不等,则false.
字符串的比较:比较的是ASCII码值,从左到右比较,知道比较出结果为止。
a:97 b:98 c:99....
A:65 B:66 C:67...
以此类推。
逻辑运算符:&&(与/且) ||(或) !(非)
情况一:&&如果两侧都为真,整个表达式为真;一侧为假,整个表达式为假。
eg:console.log(6>5 && 5>4);//true && true true
console.log(6>5 && 4>5);//true && false false
|| 如果有一侧为真,整个表达式为真;两侧都为假,整个表达式为假。
eg:console.log(6>5 || 3>4);//true
console.log(5>6 || 3>4);//false
! 非假即真,非真即假
eg:console.log(!false);//true
console.log(!true);//false
情况二://短路
console.log(6>7 && 5>4);//false //第一个式子已经为假,则不进行下一个式子的运算
console.log(6>5 || 5>7);//false //第一个式子已经为真,则不进行下一个式子的运算
情况三:
console.log(6>5 && 4);//4 //第一个式子为真,运行到4,为真,但是是具体的值则输出具体的值
console.log(5>6 || 3);//3 //第一个式子为假,运行到3,为真,为具体数值则输出3
条件运算符:(三目运算符) ?:
表达式1?表达式2:表达式3;
如果表达式1成立,则输出表达式2;
如果表达式1不成立,则输出表达式3.
输入对话框:prompt(“提示语句”);
特点:是一个输入框,有一个确认按钮,有一个取消按钮
如果你想看输入的值,要用一个变量去接收他,若点击确定按钮,变量里存的为你的i输入值;若点击取消按钮,变量里存的为null.
ParseInt() 将字符串转为数值型,并且数值取整。
.toFixed(x)保留位x小数.(会执行四舍五入)