第一周第一天笔记:

138 阅读6分钟

一、JavaScript介绍:

    简称js,是一个运行在【浏览器端】的【解释型】【弱类型】【面向对象】脚本语言
    其实由三部分组成:ECMAScript(核心语法3/5/6/7/8/9/10/11/12) + DOM(和网页挂钩的) + BOM(和浏览器挂钩)
1、浏览器端:环境:
    1、自带JavaScript解释器 - 打开浏览器就可以自动运行
    2、以后我们也会去安装一个独立的js解释器 - 学习Node.js的时候
2、
    编译型:在程序执行之前,需要先检查语法是否正确,如果不正确,直接不运行 - 严格:比如:Java、C#...
    解释型:在程序执行之前,不需要检查语法是否正确,直接运行,碰到错误就停止 - 自由:比如:js、php...
3、
    强类型:变量保存的数据,是由数据的类型来决定的 - 比如:Java - 严格
    弱类型:变量保存的数据是可以随意的,数据类型由数据来决定 - 比如:JavaScript - 自由
                        1	-	number(数字)
                        "1"	-	string(字符串)
4、面向对象 - 很难
    以后我们可能会经常见到这种写法:
		对象名.属性名;
		对象名.方法名();
5、特点:
    1、可以使用一切编辑工具编写js代码,编辑器并不代表的你的实力
    2、解释型
    3、弱类型
    4、面向对象
    5、可以做一切css完成不了的效果(轮播、选项卡、购物车、验证...)

二、如何使用js:

1、使用方式:2种
    (1)在HTML页面上书写一个script标签,再在里面书写js代码 - 上课用
		<script>
			//js代码
		</script>
    (2)创建一个xx.js的文件,再在HTML进行引入 - 正式开发
		<script src="js路径">
			//千万不要在这里再写js代码
		</script>
2、输出的方式/打桩输出 - 帮助我们以后检查错误:3种
1)*在控制台输出日志:console.log(想要输出的东西);//console - 控制台  log - 日志,推荐:不会影响到页面2)在页面上输出日志:document.write(想要输出的东西);//document - 文档 write - 写,还支持标签的写法,但是是个垃圾,比如:如果搭配点击事件,会把页面上原有的东西全部替换掉3)在弹出框输出日志:alert(想要输出的东西);//警告框,一般般:有时候会卡住整个页面,导致用户只能看到一个白板
3、*变量:创建后,可以再次修改
        何时使用:以后反复使用到的数据,都要提前把他保存在一个变量之中,以后使用变量名,相当于就是在使用变量的值
	语法:var 变量名=值;
	特殊:
		1、变量名其实不是随意的
			1、不能以数字开头
			2、建议驼峰命名法或下划线命名法
			3、命名要尽量的见名知意
				name,age,hobby,height,weight - 推荐:英文不好,就多学
				xingming,nianling,aihao,shengao - 不推荐,逼格低
				绝对不要:aa,ab,ac,ad,ae,af - 此变量名没有任何意义
		2、如果你的变量名是name,不管你保存的数据类型是什么,都会悄悄的给你转为一个字符串
		3、变量名不能是关键字
		4、变量可以只创建,不赋值,默认值为undefined,但是从今天开始我们要牢记undefined是一个垃圾,拿来做什么都要不得
		5、如果多个变量连续创建,简写:
			var 变量名=值,变量名=值,变量名=值,变量名=值,变量名=值;
4、常量:创建后,不允许修改了
            生活中的常量:
                PI
                一个小时60分
                一分钟60秒
                一天24个小时
                一年365/366天
            语法:const 常量名=值; 
            其余特殊点和变量一模一样
5、了解 - 数据类型有哪些?分为两大类
        1、*原始/基本/值类型:51、*number - 数字:取值有无数个,而且数字就是直接写,不用加任何东西(颜色是蓝色)
                2、*string - 字符串:取值有无数个,但是必须加上:""''(颜色是黑色)
                3、*boolean - 布尔:取值只有2个,分别叫true(真|对) 或 false(假|错)- 一般用于当作条件判断(颜色是蓝色)
                4null - 空,取值只有1个,就是null,唯一的作用就是用于释放变量释放内存的,节约内存空间,提升网页的性能,以后会有更好的方式(颜色是灰色)
                5undefined - 取值只有1个,就是undefined,从今天开始我们要牢记undefined是一个垃圾,拿来做什么都要不得,undefined是祖师爷犯的一个错,但是他自己不承认(颜色是灰色)

                查看数据类型:typeof(变量);

        2、引用/对象类型:有11个,可以暂时理解为有11个对象(属性和方法)等待我们学习
6、*运算符:
        1、*算术运算符:+ - * / %
                特殊:
                    1、%:取余,俗称模,两个数相除,不取商,而是取除不尽的余数
                           作用:
                                1、*任意数%2 - 判断奇偶数
                                2、取出某个数字的后n位
                                        1234%10  ->  4
                                        1234%100 -> 34
                    2、带有隐式转换:悄悄地会将数据类型转换,发生变化,默认:都是左右两边转为数字再运算
                                true->1
                                false->0
                                undefined->NaN
                                null->0
                                "1000"->1000
                                "1000px"->NaN - 暂时解决不了,只有等待以后学习了强制(显示)类型转换才能解决

                                NaN::Not A Number:不是一个数字,但是他确实是数字类型,不是一个有效数字,没有优点,但是有两个缺点:
                                    1、参与任何的算术运算结果仍为NaN
                                    2、参与任何的比较运算结果都是false
                    3、+运算特殊:如果碰上一个字符串,左右两边都会悄悄的转为字符串,+运算不再是+运算,而是拼接操作
        2、*比较/关系运算符:>  <  >=  <=  ==  !=  ===  !==
                    结果:一定是一个布尔值
                    带有隐式转换:默认左右两边都会悄悄转为数字再比较大小
                        特殊:
                            1、如果参与比较的左右两边都是一个字符串,则会按位PK每个字符的十六进制的unicode号(十进制ASCII码);
                                    数字0-9<大写A-Z<小写a-z<汉字
                                    常识:汉字的第一个字:是 一  unicode号是 4e00 ascii是19968
                                              汉字的最后一个字:是 龥  unicode号是 9fa5 ascii是40869

                            2、NaN参与任何的比较运算结果都是false,带来了一个问题:如何判断x是不是NaN,我们不能使用普通的比较运算去判断
                                    !isNaN(x)
                                    结果是一个布尔值:true->说明是有效数字   false->说明是NaN

                            3、undefined==null//true
                                    解决:全等:不带隐式转换的等值比较===,要求值相同并且数据类型也要相同
                                            !==:不带隐式转换的不等比较
        3、*赋值运算符:=    +=    -=    *=    /=    %=
                    1、=:赋值:将=右边的东西,保存到=左边的变量名之中
                    2、后面5个可以理解为是一种升级写法,运算后再保存回变量本身,举例:
                            i=i+1 ==>  i+=1;

	4、*逻辑运算符:综合比较 - 用于写条件
                    &&:与(并且)
                            全部条件都满足,结果才为true
                            只要一个不满足,结果就为false

                    ||:或者
                            全部条件都不满足,结果才为false
                            只要一个满足,结果就为true	

                    !:颠倒布尔值

	5、*自增自减运算符:
		++  -- 
		i++  ===>  i+=1  ===> i=i+1

		自增:固定的每次只能+1
		累加:+=每次加几由程序员自己决定

		鄙视题:
			前++ 和 后++的区别?
			如果单独使用,前++和后++,没有任何区别。
			但是如果参与了其他表达式,变量始终都会+1,但是前++和后++的【返回结果】不同
				前++,返回的是加了过后的新值
				后++,返回的是加了之前的旧值

	6、位运算:
		左移:m<<n,读作m左移了n位,翻译:m*2的n次方
		右移:m>>n,读作m右移了n位,翻译:m/2的n次方
		垃圾的原因:底数只能是2
扩展:用户输入框:var 变量=prompt("提示文字");