JS 数据类型
  1. JS 简介

    JS 特点

    • 可以直接嵌入 HTML 页面运行
    • 解释型语言:浏览器逐行解释执行,无需提前编译
    • 弱类型语言:变量声明不限制类型,赋值后自动确定类型

    JS 与 Java 核心区别

    • Java:编译型、强类型语言(声明必须指定类型 int num
    • JS:解释型、弱类型语言(统一 let 声明)

    JS 变量名命名规范

    变量名、函数名、自定义属性名,统一遵循以下 JS 命名规则,考试、开发通用:

    • 可由:字母、数字、下划线_、美元符号$ 组成

    • 严格区分大小写:numNum 是两个完全不同的变量

    • 不能以数字开头(例:123name 非法,name123 合法)

    • 不能包含空格、汉字、特殊符号(@ # ! - 等)

    • 不能使用 JS 关键字、保留字(let、var、const、function、if、for 等)

    • 见名知意:杜绝随意命名(a、b、c),使用语义化名称(name、age、userList)

    • 统一使用 小驼峰命名法:第一个单词首字母小写,后续单词首字母大写(例:userName、userAge、maxNum)

    • 常量推荐全大写+下划线(例:PI、MAX_SIZE)

    字符串规则

    JS 中单引号、双引号完全等价,都可以包裹字符串。

    字符串 + 数字 运算特点

    • 数字 + 字符串 → 字符串拼接
    • 想要数学运算 → parseInt() 转数字
    <script type="text/javascript">
        let num1 = 3;
        let num2 = 5;
        let result = num1 + num2;
        console.log(result); // 8
    
        let str = '10';
        console.log(num1 + str); // 310 (拼接)
    
        let result2 = num1 + parseInt(str);
        console.log(result2); // 13 (数学相加)
        alert(result2);
    </script>

    变量特点

    • let 声明变量,声明无类型,赋值才有类型
    • 变量可以任意切换数据类型(弱类型特征)

    五大基本数据类型

    image-20260731194236584

    • undefined:变量声明未赋值
    • number:数字(整数、小数)
    • string:字符串
    • boolean:布尔(true/false)
    • null:空对象

    null 和 undefined 区别

    • undefined:声明变量,未赋值
    • null:变量已赋值,值为空
    • typeof(null) → object 是 JS 历史 bug
    <script type="text/javascript">
        let v;
        console.log(v); // undefined
        console.log(typeof(v)); // undefined
    
        v = 3.14;
        console.log(typeof(v)); // number
    
        v = 'js';
        console.log(typeof(v)); // string
    
        v = true;
        console.log(typeof(v)); // boolean
    
        v = null;
        console.log(typeof(v)); // object
    </script>

    关系运算符

    == 与 === 核心区别

    • ==:只判断值相等,会自动类型转换
    • ===值 & 类型全部相等(全等,推荐)
    • !==:不全等
    <script type="text/javascript">
        let m = '3';
        let n = 3;
    
        if (m == n) {
            console.log('m==n'); // 成立
        }
    
        if (m === n) {
            console.log('m===n'); // 不成立
        }
    </script>

    String 字符串

    两种创建方式

    • 字面量:let str = 'hello'(常用)
    • 对象方式:let str = new String('hello')

    常用属性与方法

    • str.length:字符串长度
    • toUpperCase():转大写
    • toLowerCase():转小写
    • charAt(index):获取指定下标字符
    • indexOf(字符):从前往后找索引,找不到返回 -1
    • lastIndexOf(字符):从后往前找索引
    • split(分隔符):字符串切割为数组
    <script type="text/javascript">
        let str1 = 'Hello JS and Java';
        console.log(str1.indexOf('J')); // 6
        console.log(str1.indexOf('JS')); // 6
        console.log(str1.indexOf('JS', 9)); // -1
    
        let str2 = 'how are you doing today';
        let array = str2.split(' ');
        console.log(array);
        console.log('1:2:3:4'.split(':'));
    </script>

    Boolean 布尔类型

    JS 真假规则

    一切空、零、NaN 都是 false;非空非零都是 true

    false:0''空字符串、nullundefinedNaN

    <script type="text/javascript">
        console.log('-----------------')
        if (true) {
            console.log('true');
        }
        if (0) {
            console.log('0');
        }
        if (!0) {
            console.log('!0'); // true
        }
        if ('') {
            console.log('空字符串');
        }
        if ('abc') {
            console.log('abc'); // true
        }
    </script>

    Array 数组

    数组创建方式

    let array1 = new Array();      // 空数组
    let array2 = new Array(7);     // 长度为7的空数组
    let array3 = new Array(1,2,3); // 带数据数组
    let array4 = [100,200,300];    // 字面量(推荐)

    常用操作

    • 数组.length:获取长度
    • push():尾部添加
    • pop():尾部删除并返回元素
    <script type="text/javascript">
        let arr = new Array();
        arr.push('zhangsan');
        arr.push(false);
        arr.push(45);
        console.log(arr);
    
        console.log(arr.pop()); //45
        console.log(arr.pop()); //false
        console.log(arr.pop()); //zhangsan
    </script>

    Math 数学对象

    • parseInt():字符串转整数
    • Math.PI:圆周率
    • Math.round():四舍五入
    • image-20260731194327256

    eval 函数

    作用:将字符串当做 JS 代码执行

    风险:不安全、不优化、容易代码注入,工作中尽量不用

    eval('2+3') // 5
    eval('let x=10;let y=20;console.log(x*y);');

    JS 自定义对象

    对象可以包含:属性 + 方法

    <script>
        let student = {
            name: 'zhansgan',
            age: 23,
            study: function() {
                console.log(this.name + '的年龄是' + this.age + '岁');
            }
        };
        console.log(student.name);
        student.study();
    </script>

    DOM 文档对象模型

    DOM 作用

    JS 和 HTML 的桥梁,实现对标签的增、删、改、查

    五大节点

    • 文档节点:document
    • 元素节点:html 标签
    • 文本节点:标签内部文字
    • 属性节点:id、type、value
    • 注释节点

    常用获取元素方式

    • document.getElementById("id"):根据id获取单个
    • document.getElementsByTagName("标签名"):根据标签获取数组

    image-20260731194410375

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
    <table>
        <tr>
            <td><img src=""/></td>
            <td colSpan="3">购物简易计算器</td>
        </tr>
        <tr>
            <td>第一个数</td>
            <td colSpan="3">
                <input type="text" id="num1Id"/>
            </td>
        </tr>
        <tr>
            <td>第二个数</td>
            <td colSpan="3">
                <input type="text" id="num2Id"/>
            </td>
        </tr>
        <tr>
            <td><input type="button" value=" + " onclick="cal('+')"/></td>
            <td><input type="button" value=" - " onclick="cal('-')"/></td>
            <td><input type="button" value=" * " onclick="cal('*')"/></td>
            <td><input type="button" value=" / " onclick="cal('/')"/></td>
        </tr>
        <tr>
            <td>计算结果</td>
            <td colSpan="3">
                <input type="text" id="resultId"/>
            </td>
        </tr>
    </table>
    
    <script type="text/javascript">
        // eval 版(简洁但不安全)
        function cal(type) {
            let num1 = document.getElementById('num1Id').value;
            let num2 = document.getElementById('num2Id').value;
            let result = eval(parseInt(num1) + type + parseInt(num2));
            document.getElementById('resultId').value = result;
        }
    
        // switch 标准版(推荐考试/项目)
        function cal1(type) {
            let num1 = parseInt(document.getElementById('num1Id').value);
            let num2 = parseInt(document.getElementById('num2Id').value);
            let result = 0;
            switch (type) {
                case '+': result = num1 + num2; break;
                case '-': result = num1 - num2; break;
                case '*': result = num1 * num2; break;
                case '/': result = num1 / num2; break;
            }
            document.getElementById('resultId').value = result;
        }
    </script>
    </body>
    </html>

    innerText 与 innerHTML 区别

    • innerText:纯文本,不解析 HTML 标签
    • innerHTML:解析 HTML 标签,渲染样式
    <body>
    <span id="spanId">Hello Span</span> <br/>
    <button onclick="clickMe()">点击</button>
    
    <script type="text/javascript">
        function clickMe() {
            let spanObj = document.getElementById('spanId');
            // spanObj.innerText = '<h1>文字</h1>'; // 原样显示文本
            spanObj.innerHTML = '<h1 style="color: red;">innerHTML</h1>';
        }
    </script>
    </body>

    onload 页面加载事件

    作用

    HTML 先加载完毕,再执行 JS 代码,防止获取不到 DOM 元素

    window.onload = function() {
        // 页面加载完成后执行
    }

    节点创建、追加、替换

    创建节点

    • document.createElement("标签名"):创建元素
    • document.createTextNode("内容"):创建文本
    • setAttribute("属性名","值"):设置属性

    节点操作

    • 父.appendChild(子):末尾追加
    • 父.insertBefore(new,old):插入到某个节点前面
    • 父.replaceChild(new,old):替换节点
    window.onload = function() {
        let colors = ['red', 'green', 'blue'];
        let colorMeans = ['热情', '冷静', '生机'];
        let ul = document.createElement('ul');
    
        for (let i = 0; i < colors.length; i++) {
            let li = document.createElement('li');
            li.setAttribute('mean', colorMeans[i]);
            let textNode = document.createTextNode(colors[i]);
            li.appendChild(textNode);
            ul.appendChild(li);
        }
        document.body.appendChild(ul);
    }

    JS 常用事件

    事件:用户对页面的操作行为,事件函数:事件触发后的代码

    • onclick:点击
    • onmouseover:鼠标移入
    • onmouseout:鼠标移出
    • onkeyup/keydown:键盘抬起/按下
    • onfocus:获得焦点
    • onblur:失去焦点
    • onsubmit:表单提交

    事件两种绑定方式

    1. 行内绑定:<button onclick="fn()">
    2. JS 动态绑定:btn.onclick = function(){}
let btn = document.getElementById('btnId');
btn.onclick = function () {
    alert('thanks');
}
对比维度 Java JavaScript
语言类型 编译型、强类型语言 解释型、弱类型语言
运行环境 JVM 虚拟机(需安装 JRE) 浏览器 / Node.js
编译方式 先编译为字节码(.class),再运行 逐行解释执行,无需预编译
变量声明 必须指定数据类型 int num = 10; let / var / const,无需写类型
变量类型 类型固定,声明后不可更改 类型可变,可随时赋值不同类型
字符串引号 双引号 "" 表示字符串;单引号 '' 只能存单个字符 单引号 ''、双引号 "" 都可表示字符串
相等比较 == 比较值(基本类型)/ 引用(对象) == 自动转换比较值;=== 值 + 类型全等比较
类型转换 类型不匹配直接编译报错 支持隐式自动类型转换 运行报错
面向对象 纯面向对象,一切依托 class,有严格继承、封装、多态 基于对象,ES6 class 是语法糖,支持对象字面量直接创建
数值类型 区分 int、long、float、double 等多种 统一为 number 类型,不区分整数和小数
空值 null nullundefined 两种
数组 长度固定,类型统一 长度动态,可存放任意类型混合数据
区分大小写 ✅ 区分 ✅ 区分

json

定义:是一种轻量级的数据交换格式

JSON是JavaScript Object Notation缩写

特点:

  1. 易于程序员阅读和编写。
  2. 易于计算机解析和生成。
  3. 其实是javascript的子集:原生javascript支持JSON

image-20260801084825861

JSON是一种与语言无关的数据交换的格式,作用:

1、使用ajax进行前后台数据交换

2、移动端与服务端的数据交换

JSON数据格式

JSON的语法规则十分简单,可称得上“优雅完美”,总结起来有:

JSON有两种结构:

1、对象格式:{“key1″:obj1, “key2”:obj2, “key3”:obj3…}

2、数组/集合格式: [obj1,obj2,obj3…]

注意:JSON的key是字符串,JSON的value是任意类型

元素值可具有的类型:string, number, object, array, true, false, null

1、对象(Object)用大括号({})表示

{
    "id" : 12,
    "name" : "java1711",
    "age" : 20,
    "gender" : "男"
}

2、数组(Array)用方括号([][][{} {}])表示:

[
    {
       "id" : 12,
        "name" : "java1711",
        "age" : 20,
        "gender" : "男"
    }
    ,
    {
       "id" : 13,
        "name" : "java1712",
        "age" : 21,
        "gender" : "女"
    }
]
上一篇