JS = ECMAScript + DOM + BOM + 高级
ECMAScript(前身为欧洲计算机制造商协会)
JavaScript的语法规范
DOM(Document Object Model 的简称)
JavaScript操作网页上元素的API
BOM(Browser Object Model 的简称)
JavaScript操作浏览器部分功能的API
一、console.log(“内容”)在控制台打印输出内容
二、alert(“内容”)弹窗显示内容
三、document.write(“内容”)在页面书写内容
注释问题:单行,多行,方法注释等..... 快捷键:ctrl+/ 和ctrl+shift+/
驼峰命名规则:getElementById/matherAndFather/aaaOrBbbAndCcc
遵从规则:
1.变量命名必须以字母或是下标符号”_”或者”$”为开头。
2.变量名长度不能超过255个字符。
3.变量名中不允许使用空格,首个字不能为数字。
4.不用使用脚本语言中保留的关键字及保留符号作为变量名。
5.变量名区分大小写。(javascript是区分大小写的语言)
6.汉语可以作为变量名。但是不建议使用!!!(low)
var age = 19;
var age ; age = 19
不建议使用:var age = “张三”; age = 19; 跨类型。
非数值型和数值型。
使用关键字typeof:查看方法: typeof name 或者 typeof(name)
四种: 字符串 数字 布尔 未定义 空
String Number Boolean undefined null
Object、function、Array、Date、RegExp、Error.......
固定的值,让你从“字面上”理解其含义。
数值字面量
var age = 18; // 数值字面量,18为字面值
1.进制
进制包括2进制、8进制(011)、10进制、16进制(0xA)、制等....
2.浮点数
因为精度丢失问题,所以不判断计算后的两个浮点数是否相等。
3.数值范围
由于内存的限制,ECMAScript 并不能保存世界上所有的数值
最小值:Number.MIN_VALUE,这个值为: 5e-324
最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
无穷大:Infinity
无穷小:-Infinity
4.NaN
a) NaN 非数值(Not a Number的简写)
console.log(“abc”/18); //结果是NaN
Undefined和任何数值计算为NaN;
NaN 与任何值都不相等,包括 NaN 本身
b) isNaN() :任何不能被转换为数值的值都会导致这个函数返回 true
(isNaN译为是否符合一个标准,什么标准呢?不是一个数字的标 准,如果符合了那么就不是一个数字,不符合就是一个数字)
isNaN(NaN);// true
isNaN(“blue”); // true
isNaN(123); // false
1.字面量定义方式
用引号时,可单可双,唯独不可一单一双。可用.length看有几个字符。
var name = "zhangsan";
var name = 'zhangsan';
var name = 'zhangsan"; //错误,单引号和双引号要成对出现
2.转译
总结:无法输出的字符,先输出/,在输出字符。(“、\、换行等....)
3.字符串不可变
在内存中不会立刻消失,只能二次赋值,原有的字符在一定时间 内被 垃圾回收器回收。
4.字符串拼接
如果两个变量都是字符串,无论是否包含数字,只要是拼接,那么在前一个后面添加后一个字符串。(+与-情况不同,详情参考数据转换)
1.Boolean类型有两个字面量:true和false,区分大小写。(大写不对)
虽然Boolean 类型的字面值只有两个,但 ECMAScript 中所有类型的值都有与这两个 Boolean 值等价的值
2.true
true、除0数字、“something”、Object(任何对象)为true
3.false
false、0 、“”、undefined 、null为false
4.if判断时会把()内的值强行转换成boolean类型进行判断。
null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。但是null ===undefined的结果(false)。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。
任何数据类型和undefined运算都是NaN;
任何值和null运算,null可看做0运算。
一、转换成字符串类型
二、转换成数值类型
三、转换成布尔类型
Null和undefined无toString方法。
此转换容易产生NaN,一旦被转换的变量中含有非数字字符,都容易出现NaN
例:var num1 = “11”- 0; var num2 =“11”* 1;var num =“11”/1;
JS底层做了一个强制类型转换,把字符串转换成了Number进行运算。
var num1 = Number(“18”); 把字符变成了数字。
var num2 = Number(“18.99”); 结果为18.99数字型。(有小数也转换)
空字符串parseInt()和parseFloat()返回NaN,Number("")返回0
parseInt(变量):如果变量中收割字符为字母则结果为NaN。
否则取出现首个非数字前的整数。
123 = parseInt(“123.123aaaa”);
parseFloat(变量):如果变量中收割字符为字母则结果为NaN。
否则取出现首个非数字前的浮点数。(没有小数取整)
123.123 = parseFloat(“123.123aaaa”);
Boolean类型中:true数值为1;false为0;
null的数值类型为0;
undefined无数值类型或者为NaN;
任何数据类型都可以转换成boolean类型,所以和以往两个转换不同;
var bool = Boolean(“1111”); bool为true;
第一个逻辑非操作会基于无论什么操作数返回一个与之相反的布尔值
第二个逻辑非操作则对该布尔值求反
于是就得到了这个值真正对应的布尔值
主要研究操作符的种类以及优先级。
案例学习。
一、算数运算符(+—*/...)
a) 一元运算符:正号、负号、++、--、平方等一个变量就能运算
b) 二元运算符:+-*/%等两个变量才能运算
c) 三元运算符: 值1?值2:值3;
二、逻辑运算符( ||&& ! )(或且非)
三、比较运算符(<、>、==、>=...)
四、赋值运算符(=、+=、-=、*=、/=、%=)
1 ()
2 !、-(负数)、++、-- (正数省略+)(一元运算)
3 *、/、%
4 +、- (加,减)(二元运算)
5 <、<=、<、>= (一级逻辑运算)
6 ==、!=、===、!==、 (二级逻辑运算)
7 && (三级级逻辑运算)
8 ||
9?: (三元运算)
10 =、+=、-=、*=、/=、%= (赋值运算)
链接值不是布尔类型时,按照成布尔类型计算,结果本身不变。(非布尔)
例子: 1 = 2&&1; 0 = 0 && 1; 都是true取后面,都是false取前面。
链接值不是布尔类型时,按照成布尔类型计算,结果本身不变。(非布尔)
例子: 2= 2||1; 1 = 0 || 1; 都是true取前面,都是false取后面。
var obj = document.body.scrollTop || document.documentElement.scrollTop;
一、顺序结构(程序正常执行流程从上往下,从左往右)(不用研究)
赋值运算时为从右往左执行,且左侧为属性或变量,不取值!!!
二、选择结构
a) If语句
b) Switch语句
三、循环结构
a) for循环
b) while循环
c) do...while循环
程序正常执行顺序不必过多研究,特殊需求,后续老师特殊讲解。
共有两种,if语句和switch语句。If常用,switch为特殊情况使用,判断条件出现的情况特别多的时候用switch,其他时候if语句比较方便。
一、If语句用法有三种
1.if(条件1){程序1}
2.if(条件1){程序1}else{程序2}
3.if(条件1){程序1}else if(条件2){程序2}...else{程序n}
二、三目运算(也叫三元运算)(目或者元代表几个表达式)
三目运算可以替代部分if...else...功能,运算简单,使用方便,代码清晰。
表达式1?值1:值2
switch (值1) {
case value1:
程序1;
break; // break 关键字会导致代码执行流跳出 switch 语句
case value2:
程序2;
break;
default:
程序3;
}
注意:
break可以省略,如果省略,代码会继续执行下一个case
switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换
(例如,字符串 "10" 不等于数值 10)。
1.判断当天是星期几
2.把百分制转换成优良中可差
共3种,for/while/do...while;可根据需求选择使用;
1.遍历数组首选for循环,简单循环使用for。
2.而while循环强调,不记循环次数(不知道循环多少次),首选while。
3.最后do...while循环强调,无论怎样,至少执行一次是,使用do...while。
1) 执行流程
for (变量;条件1;条件2){ 执行程序 }
执行过程:变量->条件1->执行程序->条件2->条件1->执行程序.....
直到条件1不成立,跳出循环。
2) 三个表达式均为可选,但是必须写分号!!!
for(;;){程序} 死循环;
3) 案例1
6个简单案例,用来体验for循环如何使用。(利息和数列提升思维)
4) 案例2
九九乘法表
函数
函数就是可以重复执行的代码块。
因为一部分代码使用次数可能会很多,所以封装起来,需要的时候调用就可以了。
案例:求和;(总是求和)
关键字function。
function 函数名 () { 程序 }
参与运算的变量。
为什么要设置参数?为了增强函数的功能性,和程序员的交互性,和函数的可拓展行。所以我们增加了参数这个概念。
形式上参与运算的变量,无实际值,为实参占位置,就像一`个躯壳一样。(可以理解为函数的内部变量外部无法访问)
实际参与运算的变量。形参为他占位置,真实参与运算的变量。
有return函数就有值;没有return函数就没值;
函数程序运行后的结果外部需要使用的时候,我们不能直接给与,需要通过return返回。
总结:函数内部,return后面的值就是返回值;
作用:函数执行后剩下结果就是返回值。
函数执行完毕,会不会留下点儿什么,取决于有没有返回值
var temp = 函数名() = (功能)+ 该函数的返回值;
1. 如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined
2. 如果函数使用 return语句,那么跟再return后面的值,就成了函数的返回值
3. 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值 也是:undefined
4. 函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退 出,也就是说return后面的所有其他代码都不会再执行。
1、求圆的周长和面积
2、求2个数中的最大值,求3个数中的最大值
3、求一组数中的最大值和最小值
4、翻转数组,返回一个新数组
5、对数组排序,从小到大
6、求阶乘
7、求1!+2!+3!+....+n!
8、判断一个数是否是素数
1、函数名是什么
函数名 == 整个函数。
function fn(){alert(1)};
console.log(fn) == console.log(function fn(){alert(1)});
2、函数加载问题
JS加载的时候,只加载函数名,不加载函数体。所以如果想使用内部的成员变量,需要调用函数。
1、求斐波那契数列Fibonacci中的第n个数是多少?
1 1 2 3 5 8 13 21...
2、输入某年某月某日,判断这一天是这一年的第几天?(闰年)
(四年一闰,百年不闰,四百年在闰)
function f(a,b) {
return a + b; }
console.log(f(5,6));
var myFun = function (a,b){
return a + b;
}
console.log(myFun(6,7));
一、全局变量(成员变量)
哪里都可以访问到的变量。
(进入script立即定义的变量和没有var的变量)
二、局部变量
函数内部的变量,只有函数内部可以访问到。
(函数内部用var定义的变量和形参)
隐式全局变量就是隐藏的全局变量不好被发现。
function fn(){
var a = b = c = 1; // b和c就是隐式全局变量
}
注意:
function fn(){
var a = b = c = 1; // b和c就是隐式全局变量(等号)
var a = 1; b = 2; c = 3; // b和c就是隐式全局变量(分号)
var a = 1 , b = 2 , c = 3; // b和c就不是隐式全局变量(逗号)
}
函数中,定义变量在使用变量之后。
值提升变量名,不提升变量值,容易出现undefined。计算后形成NaN。
function fn(){
// var aaa;
console.log(aaa);
var aaa = 1;
}
//提前看一眼这个习惯叫什么呢? 预解析! //变量声明提升:在预解析的时候,成员变量和函数,被提升到最高位置,方便其他程序访问。 //变量声明提升特点:成员变量只提升变量名,不提升变量值。但是,函数是所有内容全部提升。(function直接定义的) //函数范围内照样会出现变量声明提升 //什么情况容易出现变量声明提升:使用变量在定义变量之前。
定义:匿名函数就是没有名字的函数。
作用:
1.不需要定义函数名的时候。(群众演员没必要起名,百万雄师下江南)
2.书写起来更简便。
匿名函数的调用有三种方法:
一、直接调用或自调用。(function(){alert(1)})()
二、事件绑定。
三、定时器。
递归:就是函数自己调用自己。(懂得)
必须有跳出条件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。