码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript -- 李立超

时间:2021-04-22 15:24:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:通过   解释   res   字母   win   创建对象   特点   自定义   art   

JavaScript - 李立超

JS = ECMAScript(标准) + DOM + BOM

JS特点:

  • 解释型语言
  • 动态语言
  • 基于原型的面向对象

JS代码需要编写到script中

alert:控制浏览器弹出警告框

alert("你好");

让计算机在页面中输出一个内容

document.write( )可以向body中输出内容

document.write("我是输出的内容");

向控制台输出一个内容

console.log()的作用是向控制台输出内容

console.log("我是向输出台输出的内容");

JS代码从上往下执行代码

3.js编写位置

可以将js代码编写到变迁的onclick属性中,当我们点击按钮时,js代码才会执行

虽然可以卸载标签的属性中,但是它们属于结构与行为耦合,不方便维护,所以不推荐使用

<button onclick="alert(‘叫你点你就点啊?‘);">麻烦点我一下</button>

可以将js代码卸载超链接的href属性中,这样当点击超链接时,会执行js代码

<a href="javascript:alert(‘没完没了了是吧‘)">你也点我一下</a>
<a href="javascript:;">点了也没用</a>

可以将js代码编写到script标签中(也不推荐使用)

<script type="text/javascript">
    alert("我是script标签中的代码");
</script>

可以将js代码编写到外部js文件中,然后通过script标签引入

写到外部文件中可以再不同的页面中同时引用,也可以利用到浏览器的缓存机制

<推荐使用>

<script type="text/javascript" src="js/script.js">
    /*src是路径*/
	
</script>

script标签一旦用于引入外部文件了,就不能再编写代码了,即使编写了浏览器也会忽略,如果需要则可以再创建一个新的script标签用于编写内部代码

4.JS基本语法

JS严格区分大小写,且每一条语句以分号(;)结尾

JS中会忽略多个空格和换行,所以我们可以利用空格和换行对代码进行格式化

5.字面量和变量

字面量:都是不可改变的值,字面量可以直接使用

变量 :可以用来保存字面量,而且变量的值是可以任意改变的,开发中都是通过变量去保存一个字面量

可以通过变量对字面量进行描述

声明变量:使用var关键字来声明一个变量

var a = 123;
console.log(a);

6.标识符

在JS中所有可以由我们自主命名的都可以称作标识符,例如:变量名、函数名、属性名都属于标识符

命名规则:1.可以含有字母、数字、_、$

? 2.标识符不能以数字开头

? 3.标识符不能是ES中的关键字或保留字

? 4.标识符一般都采用驼峰命名法

7.数据类型

数据类型指的是字面量的类型

在JS中一共有6种数据类型

? String 字符串

? Number 数值

? Boolean 布尔值

? Null 空值

? Undefined 未定义

? Object 对象

String、Numer、Boolean、Null、Undefined属于基本数据类型

Object 属于引用类型

在JS中String字符串需要使用引号引起来

\t 表示制表符

在JS中所有的数值都是Number类型,包括整数和浮点数(小数)

可以使用typeof来检查变量的类型

语法:typeof 变量 比如:(typeof a)

NaN 是一个特殊的数字,表示not a number

a = NaN;
console.log(typeof a);     /*类型为number*/

JS使用进行浮点计算,可能得到一个不精确的结果,所以不要使用JS进行对精确度要求比较高的运算

使用typeof检查一个布尔值时,会返回boolean

Null类型的值只有一个,就是null null这个值专门用来表示一个为空的对象

使用typeof检查一个null值时,会返回object

Undefined类型的值只有一个,就是undefined

当声明一个变量,但是并不给变量赋值时,它的值就是undefined

var a = null;
console.log(a);

11.强制类型转换--将其他的数据类型转换为String

? 方式一:调用被转换数据类型的toString( )方法 //被转换类型.toString( );

该方法不会影响到原变量,它会将转换的结果返回

注意:null和undefined这两个值没有toString方法,如果调用他们的方法,会报错

? 方式二:

  • 调用String( )函数,并将被转换的数据作为参数传递给函数

  • 使用String( )函数做强制类型转换时,

    对于Number和Boolean实际上就是调用的toString( )方法

    但是对于null和undefinded,就不会调用toString( )方法,

    它会将 null 直接转换为 "null"

    ? 将undefined 直接转换为 "undefined"

/*调用String()函数,来将a转换为字符串*/
a = String(a);

12.强制类型转换--将其他的数据类型转换为Number

? 转换方式一:使用Number( )函数

字符串 - - >数字

1.如果是纯数字的字符串,则直接将其转换为数字

2.如果字符串中有非数字的内容,则转换为NaN

3.如果字符串时一个空串或者是一个全是空格的字符串, 则转换为0

4.布尔->数字 true转成1 false转成0

5.null ->0

6.undefined -> NaN

var a = "abc";
//调用Number()函数来将a转换为Number类型
a = Number(a);

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

? 转换方式二:

		- 这种方式专门用来对付字符串
		- parseInt( )把一个字符串转换为一个整数
		- parseFloat( )把一个字符串转换为一个浮点数
a = "123px";
//调用parseInt()函数将a转换为Number
a = parseInt(a);
//parseInt()可以将字符串中的有效的整数内容取出来,然后转换为Number
console.log(typeof a);
console.log(a) 

/*parseFloat()作用和parseInt()类似,不同的是它可以获得有效的小数

如果对非String使用parseInt()或parseFloat()
它会先将其转换为String,然后再操作 */

14.将其他的数据类型转换为Boolean

//使用Boolean( )函数

var a = 123;
//调用Boolean()函数来将a转换为布尔值,
//除了0、空串、null、undefined、NaN,其余都是true
//对象也会转化为true
a = Boolean(a);

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


15.运算符也叫操作符

typeof会将该值得类型以字符串的形式返回

当对非Number类型的值进行运算时,会将这些值转换为Number然后再运算(字符串拼接会相加)

任何值和NaN做运算都得NaN

任何值和字符串做加法运算,都会先转换为字符串,然后再和字符串做拼接(可以利用这一特点,来将一个任意的数据类型转换为String。这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用String( ))

result = 2*null //0

% 取余

16.一元运算符

+,正号不会对数字产生任何影响

-,负号对数字进行取反

对于非Number类型的值,它会先将其转换为Number,然后再运算

可以对一个其他的数据类型使用+,来将其转换为number,原理同Number( )函数

自增(自减同理)

无论a++还是++a,都会立即使原变量的值自增1

不同点:a++和++a的值不同

a++的值等于原变量的值(自增前的值)

++a的值等于新值(自增后的值)

与运算:

如果第一个值为true,则返回第二个值

如果第一个值为false,则返回第一个值

或运算:

如果第一个值为true,则直接返回第一个值

如果第一个值为false,则返回第二个值

任何值和NaN做任何比较都是false

比较两个字符串时,比较的是字符串的字符编码

比较字符编码时,是一位一位进行比较的,如果两位一样则比较下一位

,可以用来排序

比较两个字符串型数字时,一定要转型

字符串中使用转义字符输出Unicode编码

\u四位编码

在网页中使用Unicode编码:

&#编码;这里的编码需要的是10进制

24.相等运算符

用来比较两个值是否相等,如果相等返回true,否则false

使用 == 来做相等运算:当使用==来比较两个值,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型,然后再比较

undefined衍生自null

所以这两个值做相等判断时,会返回true

NaN不和任何值相等,包括他本身

=== 全等(不全等同理):和相等的区别是,不会做自动的类型转换,如果两个值的类型不同,直接返回false

条件运算符 语法:

html条件表达式?语句1:语句2
//执行流程:条件运算符在执行时,首先对条件表达式进行求值
//如果该值为true,则执行语句1,并返回结果
//如果该值为false,则执行语句2,并返回结果

//获取a和b的最大值
var max = a > b ? a : b;

26.运算符优先级

&&比||优先级高

27.代码块

JS中的代码块只有分组的作用

29.if

如果所有条件都不满足,则执行最后else后面的语句

prompt( )可以弹出一个提示框,该提示框中会带有一个文本框,用户可以在文本框中输入内容,该函数需要一个字符串作为参数,该字符串将会作为提示框的提示文字

用户输入的内容将会作为函数的返回值返回,可以定义一个变量来接收该内容

var score = prompt("请输入小明的成绩:");

31.判断条件是否是NaN:

if(isNaN)

32.练习2

prompt( )函数的返回值是String类型

33.switch语句

switch(条件表达式) {
    case 表达式:
    	语句...
    	break;
    case 表达式;
        语句...
        break;
    default:
        语句...
        break;
}

switch(){
    case score >= 60;
        console.log("合格");
    	break;
    default:
    	console.log("不合格");
        break;
       }
//网页的换行是<br />

document.write(1+"<br />");
document.write(2+"<br />");

35.循环

while循环

? 语法:

while(条件表达式){
    语句...
    //可以使用break终止循环
}

36.计算年利率

var money = 1000;

//定义一个计数器
var count = 0;

while(money < 5000){
    money *= 1.05;
    count++;
}

console.log(money);
//将prompt放到循环中
while(true)	{
    var score = prompt("请输入小明的期末成绩:(0~100)");
//判断用户输入的值是否合法
if (score >= 0 && score <=100){
    break;
	}
    
    alert("请输入有效的分数!")
}


console.log("奇数之和为:"+sum);

37.for

for循环中的三个部分都可以省略,也可以写在外部

取整:

parseInt(i/100);	//获取百位数字

判断质数

//创建一个变量来保存当前的数的状态
//默认当前num是质数
var flag = true;

//判断num是否是质数
//获取2-num之间的数
for(var i=2;i<num;i++){
    if(num % i ==0){
        flag = false;
    }
}
	if(flag){
        alert(num + "是质数");
    }else{
        alert("这个不是质数");
    }
	

41.嵌套的for循环

打印金字塔:内层循环可以来决定图形的宽度,执行几次图形的宽度就是多少

break关键字可以用来退出swith循环语句

不能在if语句中使用break和continue

break会立即终止离他最近的哪个循环语句

可以为循环语句创建一个label,label可以是任意名称,来表示当前的循环

使用break语句时,可以再break后跟着一个label,这样break将会结束指定的循环,而不是最近的

loop1:
for(var i=0;i<5;i++){
    console.log("@外层循环"+i)
    for(var j=0;j<5;j++){
        break loop1;
        console.log("内层循环:"+j);
    }
}

break:中止当前循环

continue:跳过当次循环

continue默认只会对离他最近的循环起作用

44.测试程序的性能

在程序执行前,开启计时器

console.time("计时器的名字")可以用来开启一个计时器,它需要一个字符串作为参数,这个字符串将会作为计时器的表示

console.time("test");
......
......
......
console.timeEnd("test");	//中止计时器


可以通过Math.sqrt( )对一个数进行开方

var result = Math.sqrt(36);

console.log("result = "+result)

46.对象

JS中的数据类型

String、Number、Boolean、Null、Undefined以上五种类型属于基本数据类型,只要不是上面5种,全都是对象

基本数据类型都是单一的值,值之间没有任何联系

Object 对象:属于一种复合数据类型,在对象中可以保存多个不同数据类型的属性

对象的分类:

1.内建对象

由ES标准中定义的对象,在任何ES的实现中都可以使用

比如Math String Number Boolean Function Object

2.宿主对象

由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象,比如DOM BOM

3.自定义对象

由开发人员自己创建的对象

创建对象:使用new关键字调用的函数,是构造函数constructor

构造函数是专门用来创建对象的函数

使用typeof检查一个对象时,会返回object

var obj = new Object();

//console.log(typeof obj);

在对象中不存的值称为属性

向对象添加属性

语法:对象.属性名 = 属性值

//向obj中添加一个name属性
obj.name = "孙悟空";
//向obj中添加一个gender属性
obj.gender = "男";
//向obj中添加一个age属性
obj.age = 18;

console.log(obj); 
//对象的属性值可以添加、读取、修改

//删除对象的属性
语法:delete 对象.属性名
delete obj.name;

48.向对象中添加属性

属性名:

? 对象的属性名不强制要求遵守标识符的规范如果要使用特殊的属性名,不能采用.的方式来操作,需要使用另一种方式:

语法:对象["属性名"] = 属性值

读取时也需要采用这种方式

使用[ ]这种形式去操作属性,更加的灵活

在[ ]中可以直接传递一个变量,这样变量值是多少就会读取哪个属性(更灵活)

obj["123"] = 789;
obj["nihao"] = "你好";

var n = "123";

//console.log(obj["123"]);
console.log(obj[n]);

属性值

JS对象的属性值,可以是任意的数据类型,也可以是一个对象

//创建一个对象
var obj2 = new Object();
obj2.name = "猪八戒"

//将obj2设置为obj的属性
obj.test = obj2;

in 运算符
通过该运算符可以检查一个对象中是否含有指定的属性
	如果有,返回true,		没有则返回false
语法:
"属性名" in 对象

//检查obj中是否含有test2属性
console.log("test2" in obj);

引用数据类型:Object

JS中的变量都是保存在栈内存中的,基本数据类型的值直接在栈内存中存储

值与值之间是独立存在的,修改一个变量不会影响其他的变量

变量本身是没有名字的,它只有一段内存地址

基本数据类型和引用数据类型是有区别的

技术图片

对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间

而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当一个通过一个变量修改属性时,另一个也会收到影响

技术图片

技术图片

技术图片

当比较两个基本数据类型时,比较的是

而比较两个引用数据类型时,比较的是对象的内存地址

50

对象字面量

//使用对象字面量来创建一个对象

var obj = { };
//等于 console.log(typeof obj);

obj.name = "孙悟空";
//console.log(obj.name);

//使用对象字面量,可以在创建对象时,直接指定对象中的属性
//语法:{属性名:属性值,属性名:属性值......}
//对象字面量的属性名可以加引号也可以不加
//如果要使用一些特殊的名字,则必须加引号

var obj2 = {name:"猪八戒",
            age:28,
            gender:"男"
            test:{name:"沙和尚"}

		};
		console.log(obj2.test);
//没有属性名就不要写逗号了

51.函数---对象
函数可以封装功能,需要时可以执行
使用typeof检查一个函数对象时,会返回function

//创建一个函数对象
//可以将要封装的代码以字符串的形式传递给构造函数
//封装到函数中的代码不会立即执行,函数中的代码会在函数调用的时候执行
//调用函数的语法:函数对象()		fun()
//调用函数时,函数中封装的代码会按照顺序执行
var fun = new Function("console,log(‘Hello 这是我的第一个函数‘);");

console.log(typeof fun);
//开发中很少使用构造函数来创建一个函数对象
//使用函数声明来创建一个函数
//语法:
		function 函数名([形参1,形参2,...形参N]){
            语句
        }

//使用函数声明来创建一个函数	 第一种(简单)
	function fun2(){
        console.log("这是我的第二个函数");
        alert("哈哈哈哈");
        document.write("嘤嘤嘤");
        //一个函数可以实现多个功能
    }
	//调用:	
	fun2(); 
	console.log(fun2);

//函数表达式		第二种
var fun3 = funtion(){
    console.log("我是匿名函数中封装的代码");
}

52.函数的参数

/*定义一个用来求两个数和的函数
可以在函数的()中来指定一个或多个形参(形式参数)
多个形参之间使用  逗号,  隔开,声明形参就相当于在函数内部声明了对应的变量,但是并不赋值*/
function sum(a,b);
{
    console.log(a+b);
}
/*在调用函数时,可以在()中指定实参(实际参数)
实参将会赋值给函数中对应的形参*/
sum(1,2);
sum(123,456);
/*调用函数时解析器不会检查实参的类型,所以需要对参数进行类型的检查
调用函数时,解析器也不会检查实参的数量,多余的实参不会被赋值
如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined

函数的实参可以是任意的数据类型*/

51.函数的返回值

创建一个函数,用来计算三个数的和

可以使用return来设置函数的返回值

语法:

? return 值

return后的值将会作为函数的执行结果返回,可以定义一个变量,来接收该结果

如果return语句后不跟任何值,就相当于返回undefined

如果函数中不写return,则返回undefined

return后可以跟任意类型的值

function sum(a,b,c)
{
    //alert(a+b+c);
    
    var d = a+b+c;
    
    return d;
}
//调用函数
//变量result的值就是函数的执行结果
//函数返回什么result的值就是什么 
sum(4,7,8);

定义一个函数,判断一个数字是否是偶数,如果是返回true,否则返回false

function isOu(num)
{
    return num % 2 == 0;
}

var result = isOu(2);
console.log("result = "+result);

/*创建一个函数,可以在控制台中输出一个人的信息,可以输出人的name age gender address
实参可以是任意的数据类型,也可以是一个对象
当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递*/
function sayHello(o)
{
    console.log("o = "+o);
    console.log("我是"+o.name+",今年我"+o.age+"岁了,"+"我是一个"+o.gender+"人","我住在"+o.address);   
    //sayHello("孙悟空", 18, "男","花果山");
}

	//创建一个对象
	var obj = {
        name:"孙悟空",
        age:18,
        gender:"男",
        address:"花果山"
    };

//实参可以是一个对象,也可以是一个函数
function()
- 调用函数
- 相当于使用的函数的返回值
function
- 函数对象
- 相当于直接使用函数对象

break退出当前循环
continue跳过当次循环
return结束整个函数

返回值可以是任意的数据类型,也可以是一个对象,函数

function fun3()
{
    //在函数内部再声明一个函数
    funcion fun4()
    {
        alert("我是fun4");
    }
    
    //将fun4函数对象作为返回值返回
    return fun4;
}

a = fun3();
console.log(a);

56.立即执行函数

? 调用函数:函数对象( )

立即执行函数

? 函数执行完,立即被调用,这种函数叫做立即执行函数

? 立即执行函数往往只会执行一次

(function(a,b)
{
    console.log("a = "+a);
    console.log("b = "+b);
}) 
(123,456);

对象的属性值可以是任何的数据类型,也可以是个函数

obj,sayName = function( ){

? console.log(obj.name);

};

console.log(obj.sayName);

就是说,函数也可以称为对象的属性,如果一个函数作为一个对象的属性保存,那么我们称这个函数是这个对象的方法,调用函数就是调用对象的方法(method)

obj.sayName = function()
{
    console.log(obj.name);
};

function fun()
{
    console.log(obj.name);
};

//调方法
obj.sayName();
//调函数
fun();
//只是名称上的区别

枚举对象中的属性

使用 for...in 造句

语法:
for(var 变量 in 对象)
{
    ...
}
//for...in语句	对象中有几个属性,循环体就会执行几次
//每次执行时,会将对象中的一个属性的名字赋值给变量
for(var n in obj)
    {
        console.log("hello");
    }
   

//枚举属性
var obj = {
    name:"孙悟空",
    age:18,
    gender:"男",
    address:"花果山"
}

/*枚举对象中的属性
使用for ... in语句*/
for(var n in obj)
{
    console.log(obj.[n]);		//中括号可以传变量
}

58.作用域

作用域指一个变量的作用范围

在JS中一共有两种作用域:

1,全局作用域

  • 直接编写在script标签中的JS代码,都在全局作用域

  • 全局作用域在页面打开时创建,在页面关闭时销毁

  • 在全局作用域中有一个全局对象window,代表一个浏览器的窗口,我们可以直接使用

  • 在全局作用域中:

    创建的变量都会作为window对象的属性保存

    创建的函数都会作为window对象的方法保存

<插播知识>

变量的声明提前

  • 使用var关键字声明的变量,会在所有的代码执行之前被声明

  • 但是如果声明变量时不使用var关键字,则变量不会被声明提前

函数的声明提前

  • 使用函数声明形式创建的函数 function 函数( ) { }

  • 函数声明,会被提前创建

    function fun(){
        console.log("我是一个fun函数");
    }
    
  • 它会在所有的代码执行之前就被创建,所以我们可以再函数声明前来调用函数

  • 使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用

  • 函数表达式,不会被提前创建

var fun2 = function(){
    console.log("我是fun2函数");
};
  • 全局作用域中的变量都是全局变量
  • 在页面的任意的部分都可以访问的到

2.函数作用域

JavaScript -- 李立超

标签:通过   解释   res   字母   win   创建对象   特点   自定义   art   

原文地址:https://www.cnblogs.com/ztw1002/p/14683219.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!