JS快速入门(一)

JavaScript由三部分组成:
类似于ECMAscript 、Dom、Bom。
JavaScript的特点:
解释型语言、C和Java的语法结构、动态语言、基于原型的面向对象。

js的位置

可以写道head里面也可以写在body里面

#js代码需要写道script标签中
<script type="text/javascript">
#控制浏览器弹出一个窗口
  alert("使用js弹出一个窗口");
 #向页面输出内容
 document.write("向页面输出一个内容");
 #向控制器输出一个内容
  console.log("向控制器输出一个内容");
  var score=prompt("请输入你的成绩");
</script>

注释


/*
多行注释
*/

//单行注释

1.js中严格区分大小写
2.js语句以 " ; " 结尾
3.js会忽略多个空格和换行,可利用空格换行进行代码美化

字面量和变量

不建议直接使用字面量,可以把字面量放到变量里面,例如 123是字面量,var a=123;是变量,变量的值可以随意改变。
js中使用var关键字声明一个变量。

标识符

标识符规则:
1.标识符可以含有字母、数字、下划线、$。
2.标识符不能以数字开头,
3.标识符不能是ES中的关键字或保留字。
4.建议使用驼峰命名法,例如 student_wangwu。

js底层保存标识符采用的是Unicode编码,

数据类型

基本类型:
string 字符串
Number 数值
Boolean 布尔值
Null 空值
Undefined 未定义

引用类型:
object 对象

\n 换行
\t 制表符

声明时使用var,赋值时可以不使用。

//查看数据类型
typeof()
//数值的最大值
Number.MAX_VALUE
//正无穷
Infinity
//负无穷
-Infinity
//表示一个特殊数字
NaN

js中整数运算基本精确,浮点数运算可能得到一个不精确结果。

var bool01=true;
var bool02=false;

//Null类型的值只有一个null,是object类型
typeof(Null)

//Undefined 表示声明了未赋值,是undefind类型
typeof(Undefind)

强制类型转换

强制类型转换:将一个数据类型强制转换成其他类型。

转string:
使用tostring()方法,null和undefind不能转string,
可以使用string()方法,null和undefind会变成字符串“null”和“undefined”。

var a=123;
var b=a.tostring();
typeof(b)
//返回string类型,a的类型还是原来的类型
a=a.tostring();
a=string(a)
//a就变成字符串类型了

转Number:
使用Number()函数,数字转数字,其他转NaN,含有空格转为0,布尔值转为0/1.
parseInt()函数,转为整数
parseFloat()函数,转为浮点数,

转Boolean:
使用Boolean()函数,
数字转Boolean,0和NaN,undefind是false,其他都是true,
字符串转boolean,空串是false,其他都是true。
对象也会转换为true。

进制

十六进制 以0X开头。
八进制 以0开头。
二进制 以0b开头。(易出错浏览器不支持)

运算符

加减乘除,取余,取模、自增、自减,与或非、赋值,关系运算符、相等运算符、条件运算符。
数值相加是数值,字符串加其他都会转成字符串。

三元运算符: 条件表达式?语句1:语句2;
true?alert(“语句1”):alert(“语句2”);
在这里插入图片描述
在这里插入图片描述
代码块:只具有分组的作用。

{
       document.write("向页面输出一个内容");
       console.log("向控制器输出一个内容");
   }

条件语句、条件分支语句、while循环、

if (){
           console.log("向控制器输出一个内容");
       } else if(){
        console.log("向控制器输出一个内容");
}

  switch (条件表达式) {
          case 表达式: console.log("向控制器输出一个内容");
          case 表达式: console.log("向控制器输出一个内容");
      }
      
  while (条件表达式){
         
     } 
          
   do {
       
   }while (条件表达式);
   
for (var x=0;x<10;x++){
      console.log("向控制器输出一个内容");
  } 

break:强制停止当前循环,
continue:跳过本次循环,

对象(object)

对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性。
对象的分类:
内建对象,JavaScript自带的,如 Math,String,等等。
宿主对象,js运行环境提供的,目前主要指浏览器提供的对象。
自定义对象,由开发人员创建的。

new关键字创建对象,是构造函数constructor,
var obj=new onject();
添加属性,语法:对象.属性名=属性值;
obj.name=“孙悟空”;
读取属性,如果不存在该属性时会返回undefind
console.log(obj.name)
删除属性,语法:delete 对象名.属性名;

也可以使用 obj[“属性名”]=属性值;设置属性,更改属性,
对象的属性也可以是另一个对象。

对象复制时,共用一段内存,当一个对象的属性改变时,另一个也相应改变,因为两个人都使用共同的一段地址空间。

当比较两个基本数据类型的值时,就是比较值,
而比较万引用数据类型时,他是比较的对象的内存地址,如果两个对象是一模一样的,但是地址不同,也被判定是不同的。

使用对象字面量创建对象时直接指定对象中的属性,
语法:{属性名:属性值,属性名:属性值,。。。。}
var obj={name:“猪八戒”};

函数

也是一个对象,可以封装一些功能,在需要时执行这些功能(代码),函数中可以保存一些代码在需要时使用。

//函数表达式创建函数
var fun=new function("console.log("hello,这是我的第一个函数");");
fun();  //执行。

//创建函数语法:
function  函数名(形参列表){
语句
}
函数名();

function  函数名(形参列表){
语句
return 返回值;
}

立即执行函数

(function(){
alert("我是一个匿名函数");
})
//函数定义完,立即执行,往往只会执行函数

方法

var obj=new object();
obj.sayname=function(){
console.log("我是孙悟空");
};

调用方法
obj.sayname();

对于一个未知的对象,想要知道他的属性,可以使用for循环输出全部的对象属性,

for(var 变量名 in  对象){
console.log(变量名);
}

作用域:全局作用域,局部作用域。
在这里插入图片描述
在这里插入图片描述
this关键字
解析器在调用函数每次都会向函数内部传递一个隐含的参数,
这个参数就是this,这个对象我们称之为函数执行的上下文,
根据函数的调用方式的不同,this会指向不同的对象。以函数形式调用时,this永远会指向window,以方法的形式调用时,this就是调用方法的那个对象。

使用工厂方法调用对象,

普通创建一个对象
var obj={
    name:"小白脸",
    age:25,
    gender:"男",
    sayname:function(){
console.log(this.name);
                      }
}
工厂方法创建对象,
function createPerson(name,age,gender){
var obj=new object();
obj.name=name;
obj.age=age;
obj.gender=gender;
obj.sayname=function(){
console.log(this.name);
};
return obj;
}

构造函数
构造函数就是一个普通的函数,创建方式和普通函数没有任何区别,不同的是构造函数习惯上首字母大写。
构造函数的执行流程:
1.立即创建一个新的对象
2.将创建的对象设置为函数中的this,在构造函数中可以使用this来引用创建新的对象
3.逐行执行函数中的代码
4.将创建的对象作为返回值返回
使用同一构造函数创建的对象,我们称之为一类对象,也将一个构造函数称之为一个类,
我们将通过一个构造函数创建的对象称之为该类的实例

instanceof可以检查一个对象是否是一个类的实例
语法:对象instanceof构造函数,是返回true,否则返回false,

—构造函数中的属性和方法,每次创建一个对象都会调用一次,不同对象的属性和方法不等。
—当构造方法中的方法指向构造函数外的函数时他们是相等的。

原型对象prototype

我们所创建的每一个函数,解析器都会向函数添加一个属性值prototype,
这个属性对应着一个对象,这个对象就是我们所谓的原型对象
如果函数作为普通函数调用prototype没有任何作用,
当函数以构造函数的形式调用时,他创建的对象都会有一个隐含的属性
指向该构造函数的原型对象,我们通过_proto_来访问该属性
在这里插入图片描述

原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象
我们可以将对象中的共有内容,统一设置到原型对象中,
当我们访问对象的一个属性或者方法时,他会先在自身对象中寻找,如果有则直加使用,如果没有则会在原型对象中寻找,如果找到直接使用
以后我们创建构造函数时。我们可以将这些对象共有属性和方法,同一添加到构造函数的原型对象中去,
这样我们就不用为每个对象添加,也不会影响到全局作用域,就可以使用每个对象都是以这些属性和方法。

使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true,
console.log(“属性名”);
可以使用对象的hasownproperty()来检查对象自身是否含有该属性,
使用该刚发只有当对象自身含有该属性时,才会返回true;
mc.hasownproperty(“属性名”);
也可以查看原型里是否有该属性。
mc.proto.hasownproperty(“属性名”);

原型对象也是对象,所以它也有原型,当使用一个对象的属性或者方法时,会在自身寻找,如果自己有,则直接使用,如果没有则去原型对象中寻找,如果原型对象中有,则使用。如果没有则去原型的原型中寻找,直到找到object对象的原型,object对象的原型没有原型,则返回undefined。

function MyClass(){}
//向MyClass的原型中添加属性a
MyClass。prototype.a=123;

var mc=new MyClass();
var mc2=new MyClass();
mc.a="我是mc中的a";
console.log(mc.a);
//返回"我是mc中的a"
console.log(mc2.a);
//返回 123

创建一个实例,当我们直接在页面中打印一个对象时,事件上是输出对象的tostring()方法的返回值。

preson.tostring = function(){
return "person[name="+this.name+",age="+this.age+"]";
}

垃圾回收(gc)
有一个垃圾回收机制,来回收程序运行过程中产生垃圾,
js中拥有自动的垃圾回收机制会自动将垃圾对象从内存中销毁,
我们需要做就是将不再使用的对象设为null。

数组

读取数组中的元素,如果读取不存在的索引,它不会报错而是返回undefined,
对于连续数组length可以获取数组的长度(元素个数)
对于非连续的数组,使用length会获取到数组的最大的索引+1,
数组长度可修改,多余部分会被空出来,不足的情况下,多余的元素会被删除,
数组元素可以是任意的数据类型,可以是数字,字符串,对象,函数,数组等等。

//查看数组长度
arr.length;
//字面量创建数组
var arr= [1,2,3,4];
//使用构造函数创建数组
var arr=new Array(10,20,30);

数组的几个方法
push()
该方法可以向数组的末尾添加一个或者多个元素,并返回数组的新的长度,可以将要添加到元素作为方法的参数传递,这些元素将会自动添加到数组的末尾,
pop()
该方法可以删除数组的最后一个元素,并将删除的元素作为返回值返回,
unshift()
该方法是向数组开头添加一个或者多个元素,并且返回新的数组长度,
shift()可以删除数组的第一个元素,并且将被删除的元素作为返回值返回,
slice() 可以从数组中提取指定元素
splice() 可以用于删除数组中的指定元素,会将指定元素从原数组中删除,并将被删除的元素作为返回值返回,
在这里插入图片描述

arr.push("孙悟空","猪八戒","小白马");
arr.pop();
arr.unshift("唐僧");
arr.shift();
arr.slice(start,end)
//stat:开始位置,num:删除数量,要在该位置添加的元素
arr.splice(start,num,arr2)

数组的遍历,将数组中的元素都取出来,

//索引取数
console.log(arr[2]);

foreach()方法需要一个函数作为参数,像这样函数,由我们创建但不由我们调用,我们称之为回调函数,
数组中有几个元素就会执行几次,浏览器会遍历到的元素,
以实参的形式传递进来,我们可以来定义形参,来读取这些内容,
第一个参数,就是当前正在遍历的元素
第二个参数,就是当前正在遍历的元素的索引
第三个参数,就是正在遍历的数组对象

//a表示当前位置的数组元素
arr.foreach(function(a){
console.log("当前元素:"+a);
});

call()和apply()
-这两个方法都是函数对象的方法,需要通过函数对象来调用,
当对函数调用call()和apply()都会调用函数执行,
在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行时的this
call()方法可以将实参在对象之后依次传递
apply()方法需要将实参封装到一个数组中传递

//此时this是window
fun();
//此时this是obj对象
fun.apply(obj);

在调用函数时,浏览器每次都会传递两个隐含的参数,
1.函数的上下文对象this,
2.封装实参的对象arguments
arguments是一个类数组对象,它也可以通过索引来操作数据,来获取对象,在调用函数时,我们所传递的实参都会在arguments中保存,arguments.length可以用来获取实参的长度,我们即使不定义形参,也可以通过arguments来使用实参,它里面有一个属性叫做callee,这个属性对应一个函数对象,就是当前正在指向的函数的对象。

Date对象
在js中使用Date对象来表示一个时间
如果直接使用构造函数创建一个Date对象,则会封装当前代码执行时间,

var d=new Date();
console.log(d);

如果需要在构造函数中传递一个表示时间的字符串作为参数,时间格式为: 月份/日/年 时:分:秒
getDay() 获取当前日期对象是周几,周日为0,周一为1,。。。
getMonth() 获取当前时间对象的月份,会返回一个0–11的值,0为一月,
getTime() 获取当前日期的时间戳,时间戳是指从格林威治标准时间的1970年一月一日,0时0分0秒到当前时间所花费的毫秒数,计算机底层保存时间所用的都是时间戳,
可以用时间戳来测试代码的执行的性能

var start=Date.new();
代码段
var end=Date.new();
console.log("执行时间:"+ (end-start)+"毫秒;");

math对象
math和其他对象不同,他不是一个构造函数,他是一个工具类,封装了数学运算相关的属性和方法,

math.pI
//绝对值函数
abs();
//向上取整
math.ceil()
//向下取整
math.floor();
//四舍五入
math.round();
//生产0-1随机数
math.random();
例生成x-y的随机整数
math.round(math.random()*(y-x)+x);
//最大值
math.max();
//最小值
math.min();
//x的y次幂(次方)
math.pow(x,y);
//开方
math.sqrt();

包装类
js中提供了三个包装类,通过三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象,
String():可以将基本数据类型字符串转换成string对象
Number():可以将基本数据类型的数字转换成Number对象
Boolean():可以将基本数据类型的布尔值转换成Boolean对象
实际开发中,如果使用基本数据的对象,在做一些比较时,在做一些比较时,可能会带来一些不可预期的问题。
如:方法和属性只能添加给对象,不能添加给基本数据类型,当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类将其转换为对象,然后再调用对象的属性和方法,调用完以后,在将其转换为基本数据类型,

字符串的底层是以数组的形式保存的,
length:获取字符串长度,
charAt():可以返回字符串中指定位置的字符,根据索引获取指定位置的字符,
charcodeAt():获取指定位置字符的字符编码(Unicode编码),
fromcharcode():可以根据字符编码获取字符,
indexof():该方法可以检索一个字符串是否含有指定的内容,如果存在返回第一次出现的索引,不存在返回-1,可以指定一个第二个参数,指定开始查找到位置,
lastIndexof():从后往前找,返回最后面出现的索引,否则返回-1,
slice(start,end):可以字符串中截取指定的内容,不会影响原字符串,而是将截取到的内容返回,
substring(start,end):可以截取字符串,(包含开始位置,不包含结束位置)
substr(star,len):截取字符串,
split():可以将一个字符串才分为一个数组,需要传入字符作为参数,根据参数拆分为数组,
toUpperCase():将一个字符串转换为大写并返回,

正则表达式
创建正则表达式对象
语法:var 变量 =new RegExp(“正则表达式”,“匹配模式”);
在该函数中,可以传递一个匹配模式,作为第二个参数;i 忽略大小写,g 全局模式,
test();使用这个方法用来检查一个字符串是否符合正则表达式的规则,如果符合返回true,否则返回false,

使用字面量来创建正则表达式,语法: var 变量 = / 正则表达式/匹配模式,

var reg=new RegExp("a");
var str="a";
var result=reg.test(str)

与Java中的正则一致,这里不详细写了,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值