自学js总结(上)

  1. 输出(三种)
 alert();   //警告框
 document.write();   //向body中输出一个内容
 console.log();   //向控制台输出一个内容可以向body中输出一个内容
  1. 编写位置(四种)
		<!--
			可以将js代码编写到script标签	
		<script type="text/javascript">		
			alert("我是script标签中的代码!!");		
		</script>
		-->


		<!--
			可以将js代码编写到外部js文件中,然后通过script标签引入
			写到外部文件中可以在不同的页面中同时引用,也可以利用到浏览器的缓存机制
			推荐使用的方式
			<script type="text/javascript" src="js/script.js"></script>
		-->


			<!--
			可以将js代码编写到标签的onclick属性中
			当我们点击按钮时,js代码才会执行		
			虽然可以写在标签的属性中,但是他们属于结构与行为耦合,不方便维护,不推荐使用
			<button onclick="alert('讨厌,你点我干嘛~~');">点我一下</button>
		-->


		<!--
			可以将js代码写在超链接的href属性中,这样当点击超链接时,会执行js代码
			<a href="javascript:alert('让你点你就点!!');">你也点我一下</a>
			<a href="javascript:;">你也点我一下</a>
		-->
  1. 变量

    字面量,都是一些不可改变的值

  2. 标识符

    JS底层保存标识符时实际上是采用的Unicode编码

  3. 数据类型

    数据类型指的就是字面量的类型
    在JS中一共有六种数据类型
    String 字符串
    Number 数值
    Boolean 布尔值
    Null 空值
    Undefined 未定义
    Object 对象
    其中String Number Boolean Null Undefined属于基本数据类型
    而Object属于引用数据类型

    在字符串中我们可以使用\作为转义字符,当表示一些特殊符号时可以使用\进行转义
    \n 表示换行
    \t 制表符
    \ 表示\

  4. NUmber

    JS中可以表示的数字的最大值:Number.MAX_VALUE=1.7976931348623157e+308
    最小值:Number.MIN_VALUE=5e-324( 大于0的最小值)

    如果使用Number表示的数字超过了最大值,则会返回一个
    Infinity 表示正无穷
    -Infinity 表示负无穷
    使用typeof检查Infinity也会返回number
    NaN 是一个特殊的数字,表示Not A Number
    使用typeof检查一个NaN也会返回number

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

  5. 怎么转换成Number,什么情况下需要转换
    转换方式一:
    使用Number()函数
    字符串 --> 数字
    1.如果是纯数字的字符串,则直接将其转换为数字
    2.如果字符串中有非数字的内容,则转换为NaN
    3.如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
    布尔 --> 数字
    true 转成 1
    false 转成 0
    null --> 数字 0
    undefined --> 数字 NaN
    转换方式二:
    这种方式专门用来对付字符串
    parseInt() 把一个字符串转换为一个整数
    parseFloat() 把一个字符串转换为一个浮点数
    转换方式三:
    任何值做- * /运算时都会自动转换为Number
    我们可以利用这一特点做隐式的类型转换
    可以通过为一个值 -0 *1 /1来将其转换为Number
    原理和Number()函数一样,使用起来更加简单
    转换方式四:
    +,对于非Number类型的值,
    它会将先转换为Number,然后在运算
    可以对一个其他的数据类型使用+,来将其转换为number
    它的原理和Number()函数一样
    转换方式五:(转成String):
    任何值和字符串相加都会转换为字符串,并做拼串操作
    我们可以利用这一特点,来将一个任意的数据类型转换为String
    我们只需要为任意的数据类型 + 一个 “” 即可将其转换为String
    这是一种隐式的类型转换,由浏览器自动完成,实际上它也是调用String()函数
    转换方式六:(转成Boolean)
    如果对非布尔值进行运算,则会将其转换为布尔值,然后再取反
    所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值
    可以为一个任意数据类型取两次反,来将其转换为布尔值,
    原理和Boolean()函数一样
    注意:如果比较的两个字符串型的数字,可能会得到不可预期的结果
    在比较两个字符串型的数字时,一定一定一定要转型

console.log("11123123123123123123" < +"5"); //5>1(第一位1与第一位5比)    true   使用+将字符串“5”转成数字5
  1. 自增和自减
    a++的值等于原变量的值(自增前的值)
    ++a的值等于新值 (自增后的值)
    a-- 是变量的原值 (自减前的值)
    –a 是变量的新值 (自减以后的值)

  2. 关系运算符(大于、小于。。。)
    非数值的情况
    对于非数值进行比较时,会将其转换为数字然后在比较
    如果符号两侧的值都是字符串时,不会将其转换为数字进行比较
    而会分别比较字符串中字符的Unicode编码

  3. 编码
    js中,在字符串中使用转义字符输入Unicode编码
    \u四位编码
    在网页中使用Unicode编码
    &#编码; 这里的编码需要的是10进制

console.log("\u2620");
<h1 style="font-size: 200px;">&#9760;</h1>
  1. 相等运算符
    undefined 衍生自 null
    所以这两个值做相等判断时,会返回true
    NaN不和任何值相等,包括他本身
    可以通过isNaN()函数来判断一个值是否是NaN
    如果该值是NaN则返回true,否则返回false
console.log(undefined == null);//true
console.log(NaN == NaN); //false

var b = NaN;
console.log(isNaN(b));//true

break关键字可以用来退出switch或循环语句
不能在if语句中使用break和continue
break关键字,会立即终止离他最近的那个循环语句

	可以为循环语句创建一个label,来标识当前的循环
	label:循环语句
	使用break语句时,可以在break后跟着一个label,
	这样break将会结束指定的循环,而不是最近的
outer:
		for(var i=0 ; i<5 ; i++){
			console.log("@外层循环"+i)
			for(var j=0 ; j<5; j++){
				break outer;
				console.log("内层循环:"+j);
			}
		}
  1. 测试程序的性能(console.time//计时器)
//在程序执行前,开启计时器
//console.time("计时器的名字")可以用来开启一个计时器
//它需要一个字符串作为参数,这个字符串将会作为计时器的标识
			console.time("test");
			
			//打印2-100之间所有的数
			for(var i=2 ; i<=100000 ; i++){
				var flag = true;
				for(var j=2 ; j<=Math.sqrt(i) ; j++){
					if(i%j == 0){
						//如果进入判断则证明i不是质数,修改flag值为false
						flag = false;
						//一旦进入判断,则证明i不可能是质数了,此时循环再执行已经没有任何意义了
						//使用break来结束循环
						break;
						
						//不加break 215ms
						//加break 25ms
						//修改j<=后 2.6
					}
				}
				//如果是质数,则打印i的值
				if(flag){
					//console.log(i);
				}
			}
			
			//终止计时器
			//console.timeEnd()用来停止一个计时器,需要一个计时器的名字作为参数
			console.timeEnd("test");
			
			/*
			 * 36
			 * 1 36
			 * 2 18
			 * 3 12
			 * 4 9
			 * 6 6
			 */
			
			//可以通过Math.sqrt()对一个数进行开方
			//var result = Math.sqrt(97);
			
			//console.log("result = "+result)
			
			
  1. 对象
    使用new关键字调用的函数,是构造函数constructor
    构造函数是专门用来创建对象的函数
var obj=new Object();
  1. 属性名和属性值
    如果要使用特殊的属性名,不能采用“.”的方式来操作
    需要使用另一种方式:
    语法:对象[“属性名"]=属性值
    读取时也需要采用这种方式
    使用[]这种方式操作属性,更加灵活
    在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性

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

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

console.log("name" in obj);
  1. 基本和引用数据类型
    JS中的变量都是保存到栈内存中的,
    基本数据类型的值直接在栈内存中存储,
    值与值之间是独立存在,修改一个变量不会影响其他的变量

    对象是保存到堆内存中的,每创建一个新的对象,就会在堆内存中开辟出一个新的空间,
    变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,
    当一个通过一个变量修改属性时,另一个也会受到影响

    当比较两个基本数据类型的值时,就是比较值。
    而比较两个引用数据类型时,它是比较的对象的内存地址
    如果两个对象是一摸一样的,但是地址不同,它也会返回false

  2. 对象字面量
    创建变量方法一:
    var obj = new Object();
    创建变量方法二:(对象字面量)
    var obj={};

  3. 函数 function
    函数也是一个对象
    创建方法一:(不推荐)
    var fun=new Function(“字符串”);//fun就是一个函数对象
    //调用函数 语法:函数对象()
    创建方法二:
    使用函数声明来创建一个对象
    语法:

 function 函数名([形参1,形参2,形参3,...,形参n]){
    	语句.....
    		}

创建方法三:
使用函数表达式来创建对象

		var fun=function 函数名([形参1,形参2,形参3,...,形参n]){
    	语句.....
    		}
  1. 函数的参数
    调用函数时解析器不会检查实参的类型,
    所以要注意,是否有可能会接收到非法的参数,如果有可能则需要对参数进行类型的检查
    函数的实参可以是任意的数据类型
    调用函数时,解析器也不会检查实参的数量
    多余实参不会被赋值
    如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined
  2. ruturn
    如果return语句后不跟任何值就相当于返回一个undefined,
    如果函数中不写return,则也会返回undefined
    return后可以跟任意类型的值
    实参可以是任意的数据类型,也可以是一个对象
    当我们的参数过多时,可以将参数封装到一个对象中,然后通过对象传递
    实参可以是一个对象,也可以是一个函数
function fun3(){
	//在函数内部再声明一个函数
	function fun4(){
		alert("我是fun4");
	}
	//将fun4函数对象作为返回值返回
	return fun4;
}
fun3()();//调用fun4函数
  1. 枚举对象中的属性
    使用for … in 语句
    语法:
    for(var 变量 in 对象){ }
    for…in语句 对象中有几个属性,循环体就会执行几次
    每次执行时,会将对象中的一个属性的名字赋值给变量
var obj = {
		name:"孙悟空",
		age:18,
		gender:"男",
		address:"花果山"
 };
for(var n in obj){
	console.log("属性名:"+n);			
	console.log("属性值:"+obj[n]);
}
  1. 作用域scope
    全局作用域在页面打开时创建,在页面关闭时销毁
    在全局作用域中有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用
    在全局作用域中:
    创建的变量都会作为window对象的属性保存
    创建的函数都会作为window对象的方法保存
    调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
    每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的
    在函数作用域中可以访问到全局作用域的变量
    在全局作用域中无法访问到函数作用域的变量
    当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用
    如果没有则向上一级作用域中寻找,直到找到全局作用域,
    如果全局作用域中依然没有找到,则会报错ReferenceError
    在函数中要访问全局变量可以使用window对象
    在函数作用域也有声明提前的特性,
    使用var关键字声明的变量,会在函数中所有的代码执行之前被声明
    数声明也会在函数中所有的代码执行之前执行
    在函数中,不适用var声明的变量都会成为全局变量
    定义形参就相当于在函数作用域中声明了变量
    变量的声明提前
    使用var关键字声明的变量,会在所有的代码执行之前被声明(但是不会赋值),
    但是如果声明变量时不适用var关键字,则变量不会被声明提前
    函数的声明提前
    使用函数声明形式创建的函数 function 函数(){}
    它会在所有的代码执行之前就被创建,所以我们可以在函数声明前来调用函数
    使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值