前端笔记3 JS基础

JS基础知识

JS 概念

JavaScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言

基于对象

面向对象

JavaScript特点

  • 向HTML页面中添加交互行为
  • 脚本语言,语法和Java类似
  • 解释性语言,边执行边解释

javaScript 和 java 的关系

java是Sun 公司于1995年5月推出的,并且很快成为当时最流行的编程语言,JavaScript之前的名称叫做livescript,是网景公司开发的,由于Netscape公司与Sun公司合作,带有 "Java" 的名字有助于这门新生语言的传播。Netscape高层也都是java的粉丝,所以也希望它看上去能够像Java,因此改名为JavaScript。

Java和JavaScript是两门不同的编程语言,他们没有任何的血缘关系。Javascript,它是运行在浏览器中的一种脚本语言,可以操作HTML,提供了一种运行时改变HTML的工具。而java则是一种编程语言,它是一种通过解释方式来执行的语言。JavaScript语言运行时由解释器直接执行,是一种按照顺序执行的过程语言,也可以理解为JavaScript是客户端脚本,直接由浏览器解释执行

java和JavaScript
1、就像京东和京东方的关系一样。
2、就像马云和马如云的关系一样。
3、就像雷锋和雷峰塔的关系一样
4、就像老婆和老婆饼的关系一样
5、就像北大和北大青鸟的关系一样
6、就像印度和印度尼西亚的关系一样
7、就像卡巴斯基和巴基斯坦一样有基巴关系
8、就像张三和张三丰的关系一样
9、就像周杰和周杰伦一样
10、就像菠萝和菠萝蜜的关系一样

组成

ECMA 基础语法
liveScript / javaScript
Jscript
微软和网景公司 

ECMAScript 语法标准

DOM 文档对象模型
BOM 浏览器对象模型

html css javascript 之间对比

网页主要由三部分组成 :

html 是一座房子 (结构层- 决定网页的结构和内容( “是什么”) )

css 房子的装饰 (表现层- 设定网页的表现样式( “什么样子”) )

javascript 让房子 住进人来 (行为层- 控制网页的行为( “做什么”) )

基础语法

定义使用JS 的三种方式

内部使用JS的方式

<script type="text/javascript">
    // script 代码
</script>
可以包含在文档中的任何地方,只要保证这些代码在被使用前已读取并加载到内存即可

外部引入JS 文件的方式

 <script src="demo1.js" type="text/javascript"></script>

直接写在html 标签内部

<button onclick="javascript:alert('欢迎你');"></button>
// 含义是当点击按钮的时候 , 执行 JS的一个方法

基本输出语句

  • 浏览器视窗 打印
document.write("");
  • 在浏览器的控制台打印
console.log("");

变量

和java定义变量的区别

java 强数据类型语言

JS 弱数据类型语言

强类型定义语言和弱类型定义语言

(1)强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。

(2)弱类型定义语言:数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。

强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能够有效的避免许多错误。另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是完全没有联系的!
例如:
Python是动态语言,是强类型定义语言(类型安全的语言); 
VBScript是动态语言,是弱类型定义语言(类型不安全的语言);
JAVA是静态语言,是强类型定义语言(类型安全的语言)。

javaScript 变量的声明

a = 10;
a = "hello";
document.write(a);
//**********************************/
var a = 10;
a = "hello";

var 可以省略 但是推荐在声明变量的时候 添加上一个数据类型 var

方法的形参(强制省略 var)

同时声明多个变量, 并且直接赋值
var a,b,c = 10;

JS 中的数据类型

数据类型含义
undefinedvar width;
变量width没有初始值,将被赋予值undefined
null表示一个空值,与undefined值相等
numbervar iNum=23; //整数
var iNum=23.0; //浮点数
* NaN不是一个数字
booleantrue和false
string一组被引号(单引号或双引号)括起来的文本
- var string = “This is a string”;
引用数据类型Object 数组, 对象

undefined 不明确的

强数据类型 可以在不赋值的情况下赋默认值, int i; 默认 0

弱数据类型 var m , 根据实际值的类型来分配空间

typeof

使用typeof 查看 一个变量的数据类型

a = 10;
console.log(typeof a);

String 字符串对象

对比java中的 各种方法

// 可以设置字体的颜色, 粗细, 样式
var str = "Hello Script";
str.fontcolor("red"); 
// 相当于给 str 添加了一个外标签 <font color="red">str</font>

数组对象

// 定义方式1
var arr = new Array(3);
// 定义方式2
var arr = [元素1,元素2,...];
// 创建数组的语法格式
var arr = new Array(3);
arr[0] = 10;
arr[1] = "123";
arr[2] = new Object();
// var arr = [元素1,元素2,...];

length

var num = arr.length;
console.log(num);

join (和 string 字符串的 split 方法 正好是相对应的)

var sarr = arr.join(",");
console.log(sarr);

push (数组 长度可变 , 类似于java 中的集合)

var len = arr.push("宫骏腾");
console.log(len);

null

null  和 undefined
undefined 从 null 中 派生出来的一个类型
undefined == null  结果为 true

number

NaN 表示 not a number  也属于 number类型中的一个子类型

运算符

==  一般比较
===  严格比较
var n = 1;
var m = "1";
console.log(n == m);  // true
console.log(n === m); // false

流程控制

if 判断

if 判断中 不仅仅可以填写 布尔表达式 , 也可以填写各种数据类型

数据类型
number非零
Object非空null
布尔truefalse
undefinedundefined

for in

var arr = ["a","b","c"];
// i 是下标
for(var i in arr){
    console.log(arr[i]);
}

案例

判断字符串数组中包含指定字符的字符串个数

var arr = ["America","Greece","britain","canada","china","egypt"];
/*
1- for 遍历数组 拿到每一个元素
2- 循环统计 查找下标  包含A 或 a
 */
var count = 0;
for(var i = 0 ; i< arr.length ; i++){
    console.log( arr[i]);
    if(arr[i].indexOf("A") != -1 || arr[i].indexOf("a") != -1 ){
        count ++;
    }
}
console.log("包含a或A的字符串的个数为"+count);

JS 函数

函数定义

完成特定功能的代码语句块

分类

  • 系统函数
  • 自定义函数

常见的系统函数

var m = "10";
var n = 20;
console.log(m + n);
console.log(parseInt(m) + n);
var h = "3.14";
console.log(parseFloat(h) + n);

自定义函数

语法

第一种定义的方式
function 函数名(参数列表){  函数体 }
- 参数列表  不能写类型(var a,var b)  应该为(a,b)
- 返回值 不需要写返回值类型 , 如果该方法有返回值 直接写 return 返回值
function fun_name(){
    console.log("第一种定义函数的方法");
}
fun_name();
第二种定义的方式
var f1 = function(){
    console.log("第二种定义函数的方法");
}
f1();

调用函数

函数名();

变量作用域

全局变量和局部变量

全局变量:函数外声明的变量,称为全局变量

局部变量:函数内部使用var声明的变量,称为局部变量

在JS中,只有函数作用域,没有块级作用域!!!也就是说,if/for等有{}的结构体,并不能具备自己的作用域, 如果该变量是定义在if或者for这样的代码块中,它在代码块之外是可见的 。

术语“全局变量”指的是定义在所有函数之外的变量(也就是定义在全局代码中的变量),与之相对的是“局部变量”,所指的是在某个函数中定义的变量。其中,函数内的代码可以像访问自己的局部变量那样访问全局变量,反之则不行。

所以,函数外部不能访问函数内部局部变量(私有属性)。因为,函数内部的变量,在函数执行完毕以后,就会被释放掉

function f(){
    var a = 123;
}
console.log(a);  // a is not defined  
for(var i = 0 ; i< 5; i++){ 
}
console.log(i);  // 5
var 声明 函数级声明
function f(){
	// var a = 123;  方法之后的a 
    a = 123;  // 不写var  a提升为 全局变量
}
f();
console.log(a); // 123

let 声明 块级作用域
for(let i = 0 ; i< 5; i++){
    console.log(i);
}
console.log(i);  // ReferenceError: i is not defined

const 常量 (constant)
const i = 10;
i = 1;  // invalid assignment to const `i'
console.log(i);
变量声明和使用的顺序
console.log(m); // undefined 也是一个数据类型
var m = 10;
/**********相当于**************/
var m;
console.log(m);
m = 10;
console.log(m); // m is not defined

以上两个案例 得出结论

​ 这个函数内被声明的所有变量所有变量都会被移动(或者说提升)到函数最开始的地方。

另外,需要注意,被提升的只有变量的声明,这意味着,只有函数体内声明的这些变量在该函数执行开始时就存在,而与之相关的赋值操作并不会被提升,它还在原来的位置上。

函数中的变量有优先加载权
var a = "out";
function f(){
	//  函数自动 声明 var a;
    console.log(a);  // undefined
    var a = "in";
}
f();

启发 ==> 我们可以手动提升变量声明的位置,这样一来代码就不会被js的提升行为所混淆了。

函数的参数以及调用

function add(a,b,c){
    console.log("三个参数的函数");
}
function add(a,b){
    console.log("两个参数的函数");
}
// add(1,2);   // 两个参数的函数
add(1,2,3);     // 两个参数的函数

结论 JS 没有方法重载 , 后写的方法 会覆盖掉之前的同名方法

arguments 内置对象
function add(a,b,c){
    // 每一个函数都有一个 内置对象 arguments (数组对象)
    // 动态的确定 该函数实际调用的时候 传递的具体参数的个数
    console.log(arguments);
    console.log("三个参数的函数");
}
add(1,2);     // 两个参数的函数

函数的声明 和调用 顺序也可以不同

对象

js 对象的四种创建方式

鲁迅先生 孔乙己 回香豆(回字有四种写法 有五种,回,囬,回,逥 )

程序员 互相看不起 (程序员鄙视链) 程序员会攀比和卖弄

但是也要有可以卖弄的资本, 而学习的深入程度, 就是最重要的一点!

// 第一种创建方式
//  var person = {};  // 属性: 值
var person = {name:"张三",age:20};
console.log(person.name);
// 第二种方式
var obj = new Object();
// 添加属性
obj.name = "张三";
console.log(obj.name);
// 第三种  使用构造函数创建对象
function Person(name ,age){
    this.name = name ;
    this.age = age;
}
var per = new Person("李四",30);
console.log(per.name);
// 使用工厂模式
function createPerson(name,age,job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function(){
        alert(this.name);
    };
    return o;
}
var person1 = createPerson('Nike',29,'teacher');
var person2 = createPerson('Arvin',20,'student');

原型

闭包

事件

什么是事件

事件的三要素

1.事件源(你是要对什么东西进行操作)

2.事件(你要做什么实现所要的交互效果)

3.处理函数(在事件进行后你要目标变成什么样子)

我关空调

事件源 - 空调

事件 - 关闭空调(遥控器 点击关闭按钮)

事件函数 - 执行关闭空调的一系列操作(发送红外线)

网页进行各种处理

事件源 - 网页中的各个标签

事件 - 点击 双击 鼠标指向

事件处理函数 - 可以对内容进行操作

事件分类

页面事件
页面事件
onload一张页面或一幅图像完成加载。
鼠标事件
鼠标事件
onclick当用户点击某个对象时调用的事件句柄。
ondblclick当用户双击某个对象时调用的事件句柄。
onmousedown鼠标按钮被按下。
onmouseup鼠标按键被松开。
onmouseover鼠标移到某元素之上。
onmouseout鼠标从某元素移开。
onmousemove鼠标被移动。
键盘事件
键盘事件
onkeydown某个键盘按键被按下。
onkeyup某个键盘按键被松开。
onkeypress某个键盘按键被按下并松开。
焦点事件
焦点事件
onblur元素失去焦点
onfocus元素获得焦点
表单事件
表单事件
onsubmit提交按钮被点击
onreset重置按钮被点击
下拉菜单切换事件
下拉菜单切换事件
onchange用户改变域的内容

事件案例

每次点击按钮 ,都会在控制台打印数字

<body>
    <button onclick="javascript:f1()">你敢点我一下试试</button>
    <script>
        var count = 0;
        function f1(){
            count++;
            console.log(count);
        }
    </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值