JavaScript 语法,语句,重点知识
2020年6月21日JavaScript 输入输出语句
1 2 3 4 |
alert('弹框') //弹框提示 console.log('控制台提示信息') //控制台打印 console.dir(document.getElementById('id')) //控制台打印元素对象 prompt('请输入') //获取用户输入信息 |
表达式 是由 数字,运算符 ,变量 等以能求得的 数值 的 有意义排列方法所得的组合
JavaScript 数据类型
JavaScript的数据类型是根据等号右边的值来自动判断的
简单数据类型 (放栈里)
- Number ( 数字类型的最大值 Number.MAX_VALUE 数字类型的最小值 Number.MIN_VALUE )
- 整型值 (int)
- 浮点型值 (float)
- 无穷大 (Infinity)
- 无穷小 (-Infinity)
- 非数字 (NAN 数字 加减乘除 字符串)
- String (字符串) .lenght获取长度 数值相加,字符相连 具有不可变性,不断声明字符串改变变量的值,会不断开辟内存空间
- Boolean (布尔值)
- undefined (未定义 , 声明了遍历但是没有给值)
- null //空对象,如何这个变量以后是一个对象,但是还没想好赋什么值就给null, 这里历史bug 永远的错误
复杂数据类型 (放堆里)
- object
- Array数组
- ….
判断变量类型的方法
1 2 3 4 5 |
typeof //获取变量类型的方法 isNaN() //判断是否是非数字 if($date instanceof Object) //使用instanceof 判断数据类型 if($date instanceof Array) //数组数据对象的分支 |
数据类型准换
1 2 3 4 5 6 7 8 9 10 11 |
<strong>字符串类型转换</strong> toString() String() + 加号拼接字符串 <strong>数字类型转换 </strong>parseInt() parseFloat() Number() 利用 -*/ 隐式转换 <strong>布尔值类型转换</strong> Boolean() #'' 0 NaN null undefined 为false 其余为 true |
运算符的优先级
冒泡排序法
1 2 3 4 5 6 7 8 9 10 11 |
array = [1,34,123,543123,45,12343,6] for (i = 0; i <= array.length - 1; i++) { //外层循环趟数 for (j = 0; j <= array.length - 1 - i; j++) { //内层循环交换次数 if (array[j] >= array[j + 1]) { array[j] = array[j] ^ array[j + 1] array[j + 1] = array[j] ^ array[j + 1] array[j] = array[j] ^ array[j + 1] } } } |
function 方法
声明函数的两种方法
1 2 3 4 5 6 7 8 9 |
//利用函数关键词自定义函数 (命名函数) function getData() { console.log(1) } //函数表达式 (匿名函数) var zfGetData = function () { console.log(1) } |
立即执行函数两种写法
- 立即执行函数最大的特点,就是独立创建了一个作用域
- 写立即执行函数时候,函数上下相邻两行别忘加;分号
- 立即执行函数里面的变量都是局部变量
1 2 3 4 5 6 7 |
(function (str) { console.log(str) })('这里可以传参1'); //第二个参数可以看做调用函数 (function (str) { console.log(str); }('这里可以传参2')); //第二个参数可以看做调用函数 |
arguments
当我们不确定有多少个参数传递的时候,可以用arguments来获取,在javaScript中,arguments实际上它是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参,
arguments展示形式是一个伪数组,一次可以进行遍历,伪数组具有以下特点
- 具有length属性
- 按索引方式存储数据
- 不具有数组的pushpop等方法
作用域
通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字可用性的代码范围就是这个名字的作用域.作用域的使用提高了程序逻辑的局限性,增强了程序的可靠性,减少了名字冲突
js作用域 (es6之前)
- 全局作用域
- 整个script标签 或者一个单独的js文件
- 局部作用域
- 在函数内部就是局部作用域
- 没有块级作用域(es6之前)
内部函数调用外部变量采用就近原则,
先解析后执行,变量解析,方法解析, 变量先声明后赋值,
对象
- JavaScript的对象分为3种,自定义对象,内置对象,浏览器对象
- 对象是一组无序的相关属性和方法的集合,所有的事物都是对象字符串 数组 数值 函数 等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//创建对象方式一 var obj = { name : '张舫', age:'18', getName : function(){ console.log(this.name) }, } //创建对象方式2 var obj2 = new Object(); obj2.name = '张三丰' obj2.age = 18; obj2.getAge = function () { console.log(this.age) } //构造函数创建 对象方式3 构造函数首字母大写 function Construct(name, age, getName) { this.name = name this.age = age this.getName = getName } var ldh = new Construct('刘德华', 18, function () {console.log(this.name)}); console.log(obj.name) //调用对象属性方式一 console.log(obj['age']) //调用对象属性方式二 obj.getName() //调用对象方法 console.log(obj2.age) console.log(obj2['name']) obj2.getAge() console.log(ldh.name) console.log(ldh.age) ldh.getName() //使用 for in 遍历对象的属性和方法 for (key in ldh) { console.log(key) console.log(ldh[key]) } |
构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,他总与new运算一起使用,我们可以把对象中的一些公共属性和方法抽取出来,然后封装到函数里面.
构造函数首字母大写
案例 定义自己的数学处理对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
var myMath = { PI : 3.1415926, max:function(){ max = arguments[0] for (i = 1; i <= arguments.length; i++) { if(max < arguments[i]){ max = arguments[i] } } return max; }, min:function(){ min = arguments[0] for(k in arguments){ if(min >= arguments[k]){ min = arguments[k] } } return min; } } console.log(myMath.max(1,2,3,5,23,4,453,3,4,12,6,245,13,41,35)) |