undefined、null、boolean、number、string、symbol(ES6 引入)和 bigint(ES11 引入)。let num = 10;         // number
let str = "Hello";    // string
let isTrue = true;    // boolean
let nothing = null;    // null
let notDefined;        // undefined
let sym = Symbol();    // symbol
let bigInt = BigInt(123); // bigint
function outer() {
    let count = 0;
    return function inner() {
        count++;
        console.log(count);
    };
}
const increment = outer();
increment(); // 1
increment(); // 2
__proto__ 属性,指向其构造函数的原型。function Person(name) {
    this.name = name;
}
Person.prototype.greet = function() {
    console.log(`Hello, my name is ${this.name}`);
};
const john = new Person('John');
john.greet(); // Hello, my name is John
this 是什么?this 是一个动态绑定的关键字,指向函数执行时的上下文。它的值取决于调用函数的方式。const obj = {
    name: 'Alice',
    greet() {
        console.log(`Hello, ${this.name}`);
    }
};
obj.greet(); // Hello, Alice
const greetFunc = obj.greet;
greetFunc(); // Hello, undefined (在非严格模式下)
== 和 === 的区别。== 是宽松比较,会进行类型转换;=== 是严格比较,不会进行类型转换。console.log(0 == '0');  // true
console.log(0 === '0'); // false
pending(进行中)、fulfilled(已完成)、rejected(已失败)。const fetchData = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve('Data fetched!');
        }, 1000);
    });
};
fetchData().then(data => console.log(data)); // 1秒后输出 "Data fetched!"
async/await 是基于 Promise 的语法糖,使异步代码看起来更像同步代码。async 声明一个异步函数,await 用于等待 Promise 完成。const fetchData = () => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve('Data fetched!');
        }, 1000);
    });
};
const fetchAsyncData = async () => {
    const data = await fetchData();
    console.log(data);
};
fetchAsyncData(); // 1秒后输出 "Data fetched!"
addEventListener 的第三个参数控制。<div id="parent">
    <button id="child">Click me</button>
</div>
<script>
const parent = document.getElementById('parent');
const child = document.getElementById('child');
parent.addEventListener('click', () => {
    console.log('Parent clicked');
}, false); // false 为冒泡,true 为捕获
child.addEventListener('click', () => {
    console.log('Child clicked');
}, false);
</script>
说明:节流是指某个函数在一定时间内只能执行一次;防抖是指在事件触发后等待一段时间,如果在这段时间内又触发了事件,则重新计时。
示例(节流):
function throttle(fn, delay) {
    let lastTime = 0;
    return function(...args) {
        const now = Date.now();
        if (now - lastTime > delay) {
            lastTime = now;
            fn.apply(this, args);
        }
    };
}
示例(防抖):
function debounce(fn, delay) {
    let timer;
    return function(...args) {
        clearTimeout(timer);
        timer = setTimeout(() => {
            fn.apply(this, args);
        }, delay);
    };
}
示例(浅拷贝):
const original = { a: 1, b: { c: 2 } };
const shallowCopy = Object.assign({}, original);
shallowCopy.b.c = 3;
console.log(original.b.c); // 3 (原对象也受到影响)
示例(深拷贝):
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.b.c = 3;
console.log(original.b.c); // 2 (原对象没有受到影响)
new Vue({
    el: '#app',
    data: {
        message: 'Hello Vue!'
    }
});
new Vue({
    data() {
        return {
            message: 'Hello!'
        };
    },
    created() {
        console.log('组件创建时调用');
    },
    mounted() {
        console.log('组件挂载后调用');
    },
    destroyed() {
        console.log('组件销毁前调用');
    }
});
Vue.component() 或单文件组件(.vue 文件)来定义。Vue.component('my-component', {
    template: '<div>A custom component!</div>'
});
v-model 指令实现双向绑定。<div id="app">
    <input v-model="inputValue">
    <p>{{ inputValue }}</p> <!-- 实时显示输入的内容 -->
</div>
<script>
new Vue({
    el: '#app',
    data() {
        return {
            inputValue: ''
        };
    }
});
</script>
new Vue({
    el: '#app',
    data() {
        return {
            number: 1
        };
    },
    computed: {
        double() {
            return this.number * 2; // 计算属性
        }
    },
    methods: {
        doubleMethod() {
            return this.number * 2; // 方法
        }
    }
});
v-if、v-for、v-show 等。<div id="app">
    <p v-if="isVisible">这个段落是可见的</p>
    <button @click="toggleVisibility">切换可见性</button>
</div>
<script>
new Vue({
    el: '#app',
    data() {
        return {
            isVisible: true
        };
    },
    methods: {
        toggleVisibility() {
            this.isVisible = !this.isVisible; // 切换可见性
        }
    }
});
</script>
const store = new Vuex.Store({
    state: {
        count: 0
    },
    mutations: {
        increment(state) {
            state.count++;
        }
    }
});
new Vue({
    el: '#app',
    store,
    computed: {
        count() {
            return this.$store.state.count; // 获取状态
        }
    },
    methods: {
        increment() {
            this.$store.commit('increment'); // 提交变更
        }
    }
});
const router = new VueRouter({
    routes: [
        { path: '/home', component: HomeComponent },
        { path: '/about', component: AboutComponent }
    ]
});
new Vue({
    el: '#app',
    router
});
Vue.filter('capitalize', function(value) {
    if (!value) return '';
    return value.charAt(0).toUpperCase() + value.slice(1);
});
new Vue({
    el: '#app',
    data() {
        return {
            message: 'hello'
        };
    }
});
// 使用 Nuxt.js
export default {
    asyncData(context) {
        return context.$axios.$get('/api/data').then(data => {
            return { data };
        });
    }
};
Object.defineProperty 实现响应式,主要通过 getter/setter 劫持对象属性。而 Vue 3 则使用 Proxy API,实现更加高效和灵活的响应式系统。const vm = new Vue({
    data: {
        message: 'Hello'
    }
});
vm.message = 'World'; // 会触发视图更新
const { reactive } = Vue;
const state = reactive({
    message: 'Hello'
});
state.message = 'World'; // 会触发视图更新
// Vue 2
export default {
    data() {
        return { count: 0 };
    },
    methods: {
        increment() {
            this.count++;
        }
    }
};
// Vue 3
import { ref } from 'vue';
export default {
    setup() {
        const count = ref(0);
        const increment = () => count.value++;
        return { count, increment };
    }
};
import { defineComponent } from 'vue';
export default defineComponent({
    setup() {
        return () => <div>Hello, Vue 3!</div>;
    }
});
$set 和 Vue 3 中的反应性系统如何处理新增属性?说明:在 Vue 2 中,添加新属性需要使用 $set 方法才能使其响应式;而在 Vue 3 中,使用 Proxy 后,新增属性会自动变为响应式。
示例(Vue 2):
const vm = new Vue({
    data: {
        obj: {}
    }
});
Vue.set(vm.obj, 'newProp', 'value'); // 新增属性使其响应式
示例(Vue 3):
const { reactive } = Vue;
const state = reactive({ obj: {} });
state.obj.newProp = 'value'; // 新增属性自动响应
说明:在 Vue 2 中使用 v-on 监听事件,而在 Vue 3 中可以使用 @ 符号简化语法。
示例(Vue 2):
<button v-on:click="handleClick">Click me</button>
示例(Vue 3):
<button @click="handleClick">Click me</button>
<template>
    <teleport to="body">
        <div class="modal">这是一个模态框</div>
    </teleport>
</template>
v-model 有哪些变化?说明:Vue 3 中的 v-model 允许更灵活的使用,支持多个 v-model 和自定义 modelValue 属性。
示例:
<input v-model="message" />
示例(多个 v-model):
<MyComponent v-model:title="title" v-model:content="content" />
Suspense 组件有什么用途?Suspense 组件用于处理异步组件的加载状态,提供 fallback 内容直到异步组件加载完成。<suspense>
    <template #default>
        <AsyncComponent />
    </template>
    <template #fallback>
        <div>Loading...</div>
    </template>
</suspense>
provide/inject 是如何工作的?provide/inject 允许父组件向其所有子组件提供数据,而不需要通过 props 层层传递。// 父组件
import { provide } from 'vue';
export default {
    setup() {
        provide('key', 'value');
    }
};
// 子组件
import { inject } from 'vue';
export default {
    setup() {
        const value = inject('key');
        console.log(value); // 'value'
    }
};
说明:Vue 2 中使用全局的 errorHandler 和组件内的 errorCaptured;而 Vue 3 采用了新的 API,可以在 setup 中使用 onErrorCaptured。
示例(Vue 2):
Vue.config.errorHandler = (err, vm) => {
    console.error(err);
};
示例(Vue 3):
import { onErrorCaptured } from 'vue';
setup() {
    onErrorCaptured((err) => {
        console.error(err);
        return false; // 继续传播
    });
}
setState 来更新 UI。ListView 中保持元素顺序不变。async 和 await 处理异步函数。Future 来表示异步操作的结果。Stream 来处理一系列的异步事件,例如流式数据。Navigator.push() 和 Navigator.pop() 方法进行页面间的跳转和返回。MaterialPageRoute 或自定义的 PageRoute 实现页面动画。onGenerateRoute 或 Navigator 2.0 实现复杂的路由管理。Future 数据的 Widget,适合一次性异步数据获取。build() 方法中执行繁重的计算。const 构建不可变的 Widget。ListView.builder 等延迟加载的列表控件。RepaintBoundary 降低不必要的重绘。http 包进行网络请求。以下是一个简单的网络请求示例: import 'package:http/http.dart' as http;
import 'dart:convert';
Future<void> fetchData() async {
  final response = await http.get(Uri.parse('https://api.example.com/data'));
  if (response.statusCode == 200) {
    var data = jsonDecode(response.body);
    print(data);
  } else {
    throw Exception('Failed to load data');
  }
}
AnimatedContainer、AnimatedOpacity 等简化常见动画效果的实现。flutter_localizations 包来支持国际化。主要步骤包括: 
  pubspec.yaml 中添加依赖: dependencies:
  flutter_localizations:
    sdk: flutter
Intl 包来管理翻译文件。MaterialApp 中配置 localizationsDelegates 和 supportedLocales。SliverList、SliverGrid、SliverAppBar 等。MethodChannel 实现 Flutter 与原生代码的双向通信。因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务
