js基础篇

1.编程语言

alert 弹窗

 <script>
        alert('我是网页弹出');
 </script>

2.js的三个位置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style></style>
    <!-- 2.内嵌式的js -->
    <script>
        alert('2内嵌js');
    </script>
    <!-- 3. 外部js script 双标签 -->
    <script src="my.js"></script>
</head>

<body>
    <!-- 1. 行内式的js 直接写到元素的内部 -->
    <input type="button" value="button" onclick="alert('alert')">
</body>
</html>

my.js

alert('这是外部js')

3.注释

    <script>
        // 1. 单行注释  ctrl + /
        /* 2. 多行注释  默认的快捷键 shift +  alt  + a
           2. 多行注释  vscode 中修改多行注释的快捷键:  ctrl + shift + /
        */
    </script>

4.输入输出

prompt输入
alert 警示框
console 控制台
console.log(‘这是控制台’);

5.变量

<script>
var variable;
variable=value;
console.log(variable);
</script>

6.命名规范

js中 由字母a~z A~Z数字0~9下划线_美元$组成
区分大小写,关键字不能作为变量名,不能以数字开头 和C语言python,php一样,但无$
遵守驼峰命名法 首字母小写后面的单词大写 myValueName

7.number

        // 3. 数字型的最大值
        console.log(Number.MAX_VALUE);//1.7976931348623157e+308
        // 4. 数字型的最小值
        console.log(Number.MIN_VALUE);//5e-324
        // 5. 无穷大
        console.log(Number.MAX_VALUE * 2); // Infinity 无穷大  
        // 6. 无穷小
        console.log(-Number.MAX_VALUE * 2); // -Infinity 无穷大
        // 7. 非数字
        console.log('pink老师' - 100); // NaN

8.isNAN

判断是否为数字 返回true 或false

9.string

长度length
console.log(str.length);类似python中的len
字符串的拼接 + 只要有字符串和其他类型相拼接 最终的结果是字符串类型

        console.log(12 + 12); // 24
        console.log('12' + 12); // '1212'
        //我们变量不要写到字符串里面,是通过和 字符串相连的方式实现的
        console.log('这是' + value + '的');

10.bool & undefined

    <script>
        var flag = true; // flag 布尔型 
        var flag1 = false; // flag1 布尔型
        console.log(flag + 1); // true 参与加法运算当1来看
        console.log(flag1 + 1); // false 参与加法运算当 0来看
        // 如果一个变量声明未赋值 就是 undefined 未定义数据类型
        var str;
        console.log(str);
        var variable = undefined;
        console.log(variable + 'value'); // undefinedvalue
        console.log(variable + 1); // NaN  undefined 和数字相加 最后的结果是 NaN
        // null 空值
        var space = null;
        console.log(space + 'value'); // nullvalue
        console.log(space + 1); // 1
    </script>

11.typeof typename

eg. var num = 10;
console.log(typeof num); // number
在这里插入图片描述 通过颜色也可以判断 蓝色是数字型,白色是字符型的

12.num–string–bool

1)数字型转换为字符串型 变量**.toString()**
var str = num.toString();
2)利用 String(变量)
console.log(String(num));
3)利用 + 拼接字符串的方法实现转换效果 隐式转换
console.log(num + ‘’);
1)parseInt(变量) 可以把 字符型的转换为数字型 得到是整数(取整)
2)parseFloat(变量) 可以把 字符型的转换为数字型 得到是小数 浮点数
3)Number(变量)
4)利用了算数运算 - * / 隐式转换
1)boolean

console.log(Boolean('')); // false
    console.log(Boolean(0)); // false
    console.log(Boolean(NaN)); // false
    console.log(Boolean(null)); // false
    console.log(Boolean(undefined)); // false

13.关于类型

    console.log(parseInt('3.94')); // 3 取整 C语言一样
    console.log(0.1 + 0.2); // 0.30000000000000004
    console.log(0.07 * 100); // 7.000000000000001
    var num = 0.1 + 0.2;
    console.log(num == 0.3); // false C语言好像也一样

14.=,== 与===

=赋值
==等于
===强等于

注意:while(str!==value)

15.短路运算

逻辑与短路运算 如果表达式1 结果为真 则返回表达式2 如果表达式1为假 那么返回表达式1
console.log(123 && 456); // 456
console.log(0 && 456); // 0
console.log(0 && 1 + 2 && 456 * 56789); // 0
console.log(’’ && 1 + 2 && 456 * 56789); // ‘’
逻辑或短路运算 如果表达式1 结果为真 则返回的是表达式1 如果表达式1 结果为假 则返回表达式2
console.log(123 || 456); // 123
console.log(123 || 456 || 456 + 123); // 123
console.log(0 || 456 || 456 + 123); // 456
逻辑中断很重要 它会影响我们程序运行结果
var num = 0;
console.log(123 || num++);
console.log(num); // 0

16.if语句switch语句 与C语言一样

if (条件)
{
语句;
}

17.for循环 和C语言一样

    <script>
        var str = '';
        for (var i = 1; i <= 9; i++) { 
            for (var j = 1; j <= i; j++) 
            {
                str += j + '×' + i + '=' + i * j + '\t';
            }
            str += '\n';
        }
        console.log(str);
    </script>

18.while break,continue 和C语言一样

        do {
            var message = prompt('你爱我吗?');
        } while (message !== '我爱你')
        alert('我也爱你啊');

19.array 和php有点像

    // 1.数组(Array) :就是一组数据的集合 存储在单个变量下的优雅方式 
    // 2. 利用new 创建数组
    var arr = new Array(); // 创建了一个空的数组
    // 3. 利用数组字面量创建数组 []
    var arr = []; // 创建了一个空的数组
    // 4. arr.length 动态监测数组元素的个数
    for (var i = 0; i < arr.length; i++) {
    console.log(arr[i]);
	//[]创建数组
	$arr=['arr1']='values';
	//array建立数组
	$arr=array('arr1'=>'value1',
			   'arr2'=>'value2');
	foreach ($arr as $arra => $values)
		echo "$arra : $values";

20.函数 和php好像

function 名字(value1,value2)
{
……;
}
名字(va1,va2);
函数表达式(匿名函数)
var 变量名 = function() {};
php 一模一样

21.Arguement

<script>
    // arguments 的使用  只有函数才有 arguments对象  而且是每个函数都内置好了这个arguments
    function fn() {
        // console.log(arguments); // 里面存储了所有传递过来的实参  arguments = [1,2,3]
        // console.log(arguments.length);
        // console.log(arguments[2]);
        // 我们可以按照数组的方式遍历arguments
        for (var i = 0; i < arguments.length; i++) {
            console.log(arguments[i]);

        }
    }
    fn(1, 2, 3);
    fn(1, 2, 3, 4, 5);
    // 伪数组 并不是真正意义上的数组
    // 1. 具有数组的 length 属性
    // 2. 按照索引的方式进行存储的
    // 3. 它没有真正数组的一些方法 pop()  push() 等等
</script>

22.reverse

        var arr1 = reverse([1, 2, 3, 4, 5]);
        console.log(arr1);

23.eg

        function sort(arr) {
            for (var i = 0; i < arr.length - 1; i++) {
                for (var j = 0; j < arr.length - i - 1; j++) {
                    if (arr[j] > arr[j + 1]) {
                        var temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return arr;
        }
        var arr1 = sort([1, 4, 2, 9]);
        console.log(arr1);

24.块级作用域(es6)

块级作用域 {} if {} for {}

25.作用域链

作用域链 : 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取那个值 这种结构我们称为作用域链 就近原则

26.预解析(面试常考点)

        console.log(num); // undefined  
        var num = 10;
        fun(); // 报错  
        var fun = function() {
                console.log(10);
        // 1. 我们js引擎运行js 分为两步:  预解析  代码执行
        // (1). 预解析 js引擎会把js 里面所有的 var  还有 function 提升到当前作用域的最前面
        // (2). 代码执行  按照代码书写的顺序从上往下执行
        // 2. 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
        // (1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面  不提升赋值操作
        // (2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面  不调用函数

声明,函数,赋值/打印

26.1.eg

99999报错

        f1();
        console.log(c);
        console.log(b);
        console.log(a);

        function f1() {
            var a = b = c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }
        // 以下代码
        // function f1() {
        //     var a;
        //     a = b = c = 9;
        // 相当于 var  a  = 9; b = 9; c = 9; b 和 c 直接赋值 没有var 声明 当全局变量看
        // 集体声明  var a = 9, b = 9, c = 9;
        //     console.log(a);
        //     console.log(b);
        //     console.log(c);
        // }
        // f1();
        // console.log(c);
        // console.log(b);

27 对象object

对象是相关属性和方法的集合{}

        var obj = {
                uname: '张三',
                age: 18,
                sex: '男',
                sayHi: function() {//方法冒号后面跟的是一个匿名函数
                    console.log('hi');

                }
            }
        // (1). 调用对象的属性 我们采取 对象名.属性名
        console.log(obj.uname);
        // (2). 调用属性还有一种方法 对象名['属性名'] ·要加引号啊
        console.log(obj['age']);
        obj.sayHi();
        new来创建对象
        var obj = new Object(); // 创建了一个空的对象
        obj.uname = '张三';
        obj.age = 18;
        obj.sex = '男';
        obj.sayHi = function() {
                console.log('hi~');

            }

28.对象 类似python,php 的class
js
构造函数的语法格式
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();
var value = new 函数名(vale1,……)
python
class Duck():
def __init__(self,tall):
self.tall=tall

class Test
{
	// 属性
    public $val_1;
    public $val_2;
	// 类的方法
    public function __construct($val_1, $val_2)
    {
        $this->val_1 = $val_1;
        $this->val_2 = $val_2;
    }
    public function get_max()
    {
        return $this->val_1 > $this->val_2 ? $this->val_1:$this>val_2;
    }
}
// 实例化类,$test 是由类 Test 生成的对象
$test = new Test(83, 34);
echo $test->get_max();    

29.可以用函数来构造对象用new来创建
new关键字执行过程
1. new 构造函数可以在内存中创建了一个空的对象
2. this 就会指向刚才创建的空对象
3. 执行构造函数里面的代码 给这个空对象添加属性和方法
4. 返回这个对象
30.遍历对象

for (var k in obj) {
            console.log(k); // k 变量 输出  得到的是 属性名
            console.log(obj[k]); // obj[k] 得到是 属性值

        }

内置对象

Math

不是构造函数,不需要new
console.log(Math.ceil());//向上取整
console.log(Math.PI);
Math.round() 四舍五入 其他数字都是四舍五入,但是 .5 特殊 它往大了取
console.log(Math.round(-1.1)); // -1
console.log(Math.round(-1.5)); // 这个结果是 -1
Math.random()返回一个随机的小数 0 =< x < 1里面不跟参数
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

Date

是构造函数
var arr = new Array();
var obj = new Object();
var date= new Date();
var date1 = new Date(2019, 10, 1);
console.log(date1); // 返回的是 11月 不是 10月
getFullYear()
getMonth() 返回的月份小1个月 记得月份+1
getDate()返回的是 几号
getDay ()周一返回的是 1 周六返回的是 6 但是 周日返回的是 0

    <script>
        // 格式化日期 时分秒
        var date = new Date();
        console.log(date.getHours()); // 时
        console.log(date.getMinutes()); // 分
        console.log(date.getSeconds()); // 秒
        // 要求封装一个函数返回当前的时分秒 格式 08:08:08
        function getTimer() {
            var time = new Date();
            var h = time.getHours();
            h = h < 10 ? '0' + h : h;
            var m = time.getMinutes();
            m = m < 10 ? '0' + m : m;
            var s = time.getSeconds();
            s = s < 10 ? '0' + s : s;
            return h + ':' + m + ':' + s;
        }
        console.log(getTimer());
    </script>
        // 1. 通过 valueOf()  getTime()
        var date = new Date();
        console.log(date.valueOf()); // 就是 我们现在时间 距离1970.1.1 总的毫秒数
        console.log(date.getTime());
        // 2. 简单的写法 (最常用的写法)
        var date1 = +new Date(); // +new Date()  返回的就是总的毫秒数
        console.log(date1);
        // 3. H5 新增的 获得总的毫秒数
        console.log(Date.now());
       function countDown(time) {
            var nowTime = +new Date(); // 返回的是当前时间总的毫秒数
            var inputTime = +new Date(time); // 返回的是用户输入时间总的毫秒数
            var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数 
            var d = parseInt(times / 60 / 60 / 24); // 天
            d = d < 10 ? '0' + d : d;
            var h = parseInt(times / 60 / 60 % 24); //时
            h = h < 10 ? '0' + h : h;
            var m = parseInt(times / 60 % 60); // 分
            m = m < 10 ? '0' + m : m;
            var s = parseInt(times % 60); // 当前的秒
            s = s < 10 ? '0' + s : s;
            return d + '天' + h + '时' + m + '分' + s + '秒';
        }
        console.log(countDown('2021-5-1 00:00:00'));
        var date = new Date();
        console.log(date);

array

var arr=[1,2,3];
console.log(arr[0])
var arr1 = new Array(2);//空间大小为2,有两个空数组
var arr1 = new Array(2, 3); // 等价于 [2,3] 这样写表示 里面有2个数组元素 是 2和3

检查是否为数组
// (1) instanceof  运算符 它可以用来检测是否为数组
        var arr = [];
        var obj = {};
        console.log(arr instanceof Array);
        console.log(obj instanceof Array);
        // (2) Array.isArray(参数);  H5新增的方法  ie9以上版本支持
        console.log(Array.isArray(arr));
        console.log(Array.isArray(obj));

删除添加

    <script>
        // 添加删除数组元素方法
        // 1. push() 在我们数组的末尾 添加一个或者多个数组元素
        var arr = [1, 2, 3];
        // arr.push(4, 'red');
        console.log(arr.push(4, 'pink'));
        console.log(arr);
        // push完毕之后,返回的结果是 新数组的长度 
        
        // 2. unshift 在我们数组的开头 添加一个或者多个数组元素
        console.log(arr.unshift('red', 'purple'));
        console.log(arr);
        //  unshift完毕之后,返回的结果是 新数组的长度 
        
        // 3. pop() 它可以删除数组的最后一个元素  
        console.log(arr.pop());
        console.log(arr);
        //  pop完毕之后,返回的结果是 删除的那个元素 
        
        // 4. shift() 它可以删除数组的第一个元素  
        console.log(arr.shift());
        console.log(arr);
        // shift完毕之后,返回的结果是 删除的那个元素 
    </script>
排序
		arr.reverse();
        arr1.sort(function(a, b) {
            //  return a - b; 升序的顺序排列
            return b - a; // 降序的顺序排列
        });
index

str.indexOf(‘要查找的字符’, [起始的位置])
indexOf 从前往后找
和lastIndexOf 从后往前找
return 找到的第一个
找不到 return -1

eg
        function unique(arr) {
            var newArr = [];
            for (var i = 0; i < arr.length; i++) {
                if (newArr.indexOf(arr[i]) === -1) {
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
将数组转化成字符串

`1. to string

js

        var arr = [1, 2, 3];
        console.log(arr.toString()); // 1,2,3

php

class Info {
    public function __toString()
    {
        return "info";
    }
}
$info = new Info();

2.join 与python一样
js

        var arr1 = ['green', 'blue', 'red'];
        console.log(arr1.join()); // green,blue,red
        console.log(arr1.join('-')); // green-blue-red

py

s = ("a", "b", "c") 
print " ".join(s)#a b c

基本包装对象

        var str = 'andy';
        console.log(str.length);
        // 对象 才有 属性和方法   复杂数据类型才有 属性和方法 
        // 简单数据类型为什么会有length 属性呢? 
        // 基本包装类型:  就是把简单数据类型 包装成为了 复杂数据类型 
        // (1) 把简单数据类型包装为复杂数据类型 
        var temp = new String('andy');
        // (2) 把临时变量的值 给 str
        str = temp;
        // (3) 销毁这个临时变量
        temp = null;

new String new Number new Boolean
字符串的不可变所以不要大量的拼接字符串
var a=‘one’;
console.log(‘str’);
var a=‘first’;
one 这个空间不会删除
所以字符串用的所有方法都不会修改字符串本身,只会开辟新的空间

返回字符函数

charAt(index)
charCodeAt(index)返回ASCII
str[index](h5新增的)

eg
        var str = 'Yooooohopnl';
        var o = {};
        for (var i = 0; i < str.length; i++) {
            var chars = str.charAt(i); // chars 是 字符串的每一个字符
            if (o[chars]) { // o[chars] 得到的是属性值
                o[chars]++;
            } else {
                o[chars] = 1;
            }
        }
        console.log(o);
        // 2. 遍历对象
        var max = 0;
        var ch = '';
        for (var k in o) {
            // k 得到是 属性名
            // o[k] 得到的是属性值
            if (o[k] > max) {
                max = o[k];
                ch = k;
            }
        }
        console.log(max);
        console.log('最多的字符是' + ch);

字符串方法 (这不是mysql)

1.concat(str1,str2…)
2.substr(start,length)

    var str1 = 'weixinbian';
    console.log(str1.substr(2, 2));//ix

mysql:SUBSTR(str,pos,len);从pos开始的位置,截取len个字符
3.slice(start,end)
4.substring(start,end)

替换字符串(和python一样)

replace

        // 1. 替换字符 replace('被替换的字符', '替换为的字符')  它只会替换第一个字符
        var str = 'andyandy';
        console.log(str.replace('a', 'b'));
        // 2. 字符转换为数组 split('分隔符')    前面我们学过 join 把数组转换为字符串
        var str2 = 'red, yellow, blue';
        console.log(str2.split(','));//array(3)0: "red"1: " yellow"2: " blue"

数据类型

    1. 简单数据类型 是存放在栈里面 里面直接开辟一个空间存放的是值
    2. 复杂数据类型 首先在栈里面存放地址 十六进制表示  然后这个地址指向堆里面的数据

简单数据类型

null 返回的是一个空的对象 object
如果有个变量我们以后打算存储为对象,暂时没想好放啥, 这个时候就给 null

复杂数据类型

        function Person(name) {
            this.name = name;
        }

        function f1(x) { // x = p地址赋值
            console.log(x.name); // 2. 这个输出什么 ?  red   
            x.name = "snt";
            console.log(x.name); // 3. 这个输出什么 ?   snt
        }
        var p = new Person("red");
        console.log(p.name); // 1. 这个输出什么 ?   red
        f1(p);
        console.log(p.name); // 4. 这个输出什么 ?   snt
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值